Written by Aunoy Poddar July 21st, 2022

Process the puncta quantified raw data

current_file <- rstudioapi::getActiveDocumentContext()$path
output_file <- stringr::str_replace(current_file, '.Rmd', '.R')
knitr::purl(current_file, output = output_file)
file.edit(output_file)

Import packages and functions

library(Seurat)
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Attaching SeuratObject
library(tictoc)
library(ggplot2)
library(patchwork)
library(pheatmap)
library(RColorBrewer)
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.1 ──
✔ tibble  3.1.8     ✔ dplyr   1.0.8
✔ tidyr   1.2.0     ✔ stringr 1.4.0
✔ readr   2.1.2     ✔ forcats 0.5.1
✔ purrr   0.3.4     
── Conflicts ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
library(gridExtra)

Attaching package: ‘gridExtra’

The following object is masked from ‘package:dplyr’:

    combine
library(png)
library(cowplot)

Attaching package: ‘cowplot’

The following object is masked from ‘package:patchwork’:

    align_plots
library(magick)
Linking to ImageMagick 6.9.10.23
Enabled features: fontconfig, freetype, fftw, lcms, pango, webp, x11
Disabled features: cairo, ghostscript, heic, raw, rsvg
Using 80 threads
library(scales)

Attaching package: ‘scales’

The following object is masked from ‘package:purrr’:

    discard

The following object is masked from ‘package:readr’:

    col_factor

Load the data

data_dir = '/home/aunoy/st/arc_profiling/st_analysis/hand_annotated_data/rethresholded'
meta_dir = '/home/aunoy/st/arc_profiling/st_analysis/hand_annotated_data/overlay'
output_dir_plot = '/home/aunoy/st/arc_profiling/st_analysis/results/plots'
output_dir_tbls = '/home/aunoy/st/arc_profiling/st_analysis/results/tables'

Merge both datasets and generate a metadata column that corresponds

to the cell

df_408 = data.frame()
for (file_name in list.files(data_dir)){
  print(file_name)
  if(grepl('164', file_name)){
    next
  }
  #if(grepl('408_TC', file_name) | grepl('408_vMS', file_name)){
  #  next
  #}
  df_to_append <- read.table(file.path(data_dir, file_name), sep = ',', header = TRUE)
  while(length(ind <- which(df_to_append$Image.Name == "")) > 0){
    df_to_append$Image.Name[ind] <- df_to_append$Image.Name[ind -1]
  }
  
  colnames(df_to_append) <- toupper(colnames(df_to_append))
  df_to_append <- df_to_append %>%
    mutate(area = strsplit(file_name, '.csv')[[1]])
  
  ## Add relative_XY_position
  
  if(!is_empty(df_408)){
    df_to_append <- df_to_append %>%
          dplyr::select(colnames(df_408))
  }
  df_408 <- rbind(df_408, df_to_append)
}
[1] "164_CC.csv"
[1] "164_MS_CC.csv"
[1] "164_MS_TC.csv"
[1] "164_TC.csv"
[1] "408_CC.csv"
[1] "408_dMS_TC.csv"
[1] "408_MS_CC.csv"
[1] "408_TC.csv"
[1] "408_vMS_TC.csv"
df_408$IMAGE.NAME = unlist(lapply(df_408$IMAGE.NAME, gsub, pattern='_Cluster', replacement=''))
df_408$IMAGE.NAME = unlist(lapply(df_408$IMAGE.NAME, gsub, pattern='[*]', replacement=''))
df_408$IMAGE.NAME = unlist(lapply(df_408$IMAGE.NAME, gsub, pattern='X', replacement=''))
df_408$IMAGE.NAME = unlist(lapply(df_408$IMAGE.NAME, gsub, pattern='L2_', replacement='L2-'))
df_408$IMAGE.NAME = unlist(lapply(df_408$IMAGE.NAME, gsub, pattern='-L2', replacement='_L2'))
df_408$IMAGE.NAME = unlist(lapply(df_408$IMAGE.NAME, gsub, pattern='Tc_12', replacement='TC_12'))
## Missing
df_408 = df_408[df_408$IMAGE.NAME != 'Layer1', ]
df_408 = df_408[df_408$IMAGE.NAME != 'TC_1', ]
df_408 = df_408[df_408$IMAGE.NAME != 'TC_18', ]
df_408 = df_408[df_408$IMAGE.NAME != 'TC_19', ]
#df_408$IMAGE.NAME = toupper(df_408$IMAGE.NAME)
unique(df_408$IMAGE.NAME)
 [1] "CC_Cortical1" "CC_Cortical2" "CC_L2-1"      "CC_L2-2"      "CC_L2-3"      "TC_2"         "TC_3"         "TC_4"         "TC_5"         "TC_6"        
[11] "TC_7"         "TC_8"         "TC_9"         "TC_10"        "CC_4"         "CC_5"         "CC_6"         "CC_7"         "CC_8"         "CC_9"        
[21] "CC_10"        "CC_11"        "CC_12"        "TC_16"        "TC_17"        "TC_20"        "TC_11"        "TC_12"        "TC_13"        "TC_14"       
[31] "TC_15"       

Order the images

unique(df_408$IMAGE.NAME)
 [1] "CC_Cortical1" "CC_Cortical2" "CC_L2-1"      "CC_L2-2"      "CC_L2-3"      "TC_2"         "TC_3"         "TC_4"         "TC_5"         "TC_6"        
[11] "TC_7"         "TC_8"         "TC_9"         "TC_10"        "CC_4"         "CC_5"         "CC_6"         "CC_7"         "CC_8"         "CC_9"        
[21] "CC_10"        "CC_11"        "CC_12"        "TC_16"        "TC_17"        "TC_20"        "TC_11"        "TC_12"        "TC_13"        "TC_14"       
[31] "TC_15"       
images_ordered = c('TC_20', 'TC_17', 'TC_16', 'TC_15', 'TC_14', 'TC_13', 'TC_12', 'TC_11', 'TC_10', 'TC_9', 'TC_8', 'TC_7', 'TC_6', 'TC_5',
                   'TC_4', 'TC_3', 'TC_2', 'CC_4', 'CC_5', 'CC_6', 'CC_7', 'CC_8', 'CC_9', 'CC_10', 'CC_11', 'CC_12', 'CC_L2-3', 'CC_L2-2', 'CC_L2-1', 'CC_Cortical1', 'CC_Cortical2')
x_horz = 1:length(images_ordered) * 35
y_horz = rep(0, length(images_ordered))
horz_embedding = data.frame()
df_408$X_horz = -1
df_408$Y_horz = -1
IMAGE_SIZE = 1024
## This is the size of an image in the global coordinate space
IMAGE_LEN = 25

images = list.files(meta_dir)
for(i in 1:length(images_ordered)){
    image_name = images_ordered[i]
    print(image_name)
    split_names = strsplit(image_name, '_')
    cortex = toupper(split_names[[1]][1])
    number = split_names[[1]][2]
    number_csv = paste0('_', number, '.csv')
    filename = images[grepl(cortex, images) & grepl(number_csv, images) & grepl('408', images)]
    coordinates = read.table(file.path(meta_dir, filename), sep = ',', header = TRUE)
    ## checked already that lists are equal, missing 1, 18, 19 for now, layer 1 and others
 
    ## so this is a little tricky, so need to get it right
    ## Remember, it is the top right that the coordinate is coming from, but
    ## the bottom right is the new coordinate space.
    ## so first when we get the original coordinate space, to set to relative
    ## of bottom would be the same X, but 1024 - Y
    
    ## push out the coordinates for better visualization
    #x_repelled <- (512 - coordinates$X_Coordinate_In_pixels)
    
    
    df_408[df_408$IMAGE.NAME == image_name, 'X_horz'] = (coordinates$X_Coordinate_In_pixels / 
                                                      IMAGE_SIZE * IMAGE_LEN) + y_horz[i]
    df_408[df_408$IMAGE.NAME == image_name, 'Y_horz'] = ((1024-coordinates$Y_Coordinate_In_pixels) / 
                                                      IMAGE_SIZE * IMAGE_LEN) + x_horz[i]
}
[1] "TC_20"
[1] "TC_17"
[1] "TC_16"
[1] "TC_15"
[1] "TC_14"
[1] "TC_13"
[1] "TC_12"
[1] "TC_11"
[1] "TC_10"
[1] "TC_9"
[1] "TC_8"
[1] "TC_7"
[1] "TC_6"
[1] "TC_5"
[1] "TC_4"
[1] "TC_3"
[1] "TC_2"
[1] "CC_4"
[1] "CC_5"
[1] "CC_6"
[1] "CC_7"
[1] "CC_8"
[1] "CC_9"
[1] "CC_10"
[1] "CC_11"
[1] "CC_12"
[1] "CC_L2-3"
[1] "CC_L2-2"
[1] "CC_L2-1"
[1] "CC_Cortical1"
[1] "CC_Cortical2"

We have the coordinates for 408_TC and others

rownames(df_408) = 1:nrow(df_408)
jy_408 = df_408 %>%
  dplyr::select(-c(area, IMAGE.NAME, X_horz, Y_horz)) %>%
  t() %>%
  CreateSeuratObject()

just set everything from below 1 in ratio to zero

jy_408 <- NormalizeData(jy_408, scale.factor = 1e5) ###
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
normed = GetAssayData(jy_408, slot = 'data')
normed[normed < 3] = 0
jy_408 <- SetAssayData(jy_408, slot = 'data', normed)
jy_408 <- FindVariableFeatures(jy_408, selection.method = "vst")
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
all.genes <- rownames(jy_408)
jy_408 <- ScaleData(jy_408, features = all.genes)
Centering and scaling data matrix

  |                                                                                                                                                            
  |                                                                                                                                                      |   0%
  |                                                                                                                                                            
  |======================================================================================================================================================| 100%
jy_408 <- RunPCA(jy_408, approx = FALSE)
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
PC_ 1 
Positive:  VIP, ASCL1, CXCR4, RELN, SATB2, MAF1, KIA0319, EMX1, GAD1, CXCL12 
       PAX6, DLX2, SST, PROX1, LHX6, NCAM1 
Negative:  DCX, TBR1, LRP8, SCGN, COUPTF2, EGFR, CXCL14, TSHZ1, GSX2, EOMES 
       SP8, NKX2.1, CALB2, CXCR7, DCDC2, VLDLR 
PC_ 2 
Positive:  TBR1, EOMES, KIA0319, DCDC2, LRP8, CALB2, DCX, SATB2, CXCL12, EGFR 
       EMX1, ASCL1, COUPTF2, PAX6, RELN, CXCR4 
Negative:  MAF1, TSHZ1, NKX2.1, SST, GAD1, DLX2, PROX1, SP8, GSX2, VIP 
       SCGN, LHX6, VLDLR, CXCL14, CXCR7, NCAM1 
PC_ 3 
Positive:  COUPTF2, DLX2, PROX1, GAD1, CXCR4, LHX6, LRP8, TSHZ1, CXCL14, EOMES 
       NKX2.1, SP8, CALB2, CXCL12, DCDC2, VLDLR 
Negative:  SATB2, RELN, MAF1, PAX6, ASCL1, SCGN, SST, EMX1, GSX2, NCAM1 
       DCX, KIA0319, VIP, EGFR, CXCR7, TBR1 
PC_ 4 
Positive:  NCAM1, TSHZ1, VLDLR, CXCL14, PROX1, EGFR, CXCR7, DCX, ASCL1, DCDC2 
       CALB2, PAX6, GSX2, SCGN, EOMES, KIA0319 
Negative:  LHX6, DLX2, LRP8, SP8, VIP, SST, COUPTF2, NKX2.1, TBR1, CXCR4 
       EMX1, RELN, CXCL12, MAF1, GAD1, SATB2 
PC_ 5 
Positive:  GSX2, SP8, NKX2.1, SCGN, COUPTF2, CXCL14, EGFR, EMX1, TSHZ1, CALB2 
       CXCL12, TBR1, PAX6, SATB2, MAF1, KIA0319 
Negative:  SST, CXCR4, DCDC2, GAD1, PROX1, EOMES, DLX2, VIP, DCX, VLDLR 
       RELN, NCAM1, LHX6, ASCL1, CXCR7, LRP8 
jy_408 <- FindNeighbors(jy_408, dims = 1:30)
Computing nearest neighbor graph
Computing SNN
jy_408 <- FindClusters(jy_408, resolution = 1.5)
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1013
Number of edges: 35954

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5629
Number of communities: 12
Elapsed time: 0 seconds
jy_408 <- RunUMAP(jy_408, dims = 1:30)
Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session
17:52:20 UMAP embedding parameters a = 0.9922 b = 1.112
17:52:20 Read 1013 rows and found 30 numeric columns
17:52:20 Using Annoy for neighbor search, n_neighbors = 30
17:52:20 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:52:20 Writing NN index file to temp file /tmp/RtmpKuWa3v/filebb88168a050d
17:52:20 Searching Annoy index using 1 thread, search_k = 3000
17:52:20 Annoy recall = 100%
17:52:21 Commencing smooth kNN distance calibration using 1 thread
17:52:21 Initializing from normalized Laplacian + noise
17:52:21 Commencing optimization for 500 epochs, with 38030 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:52:22 Optimization finished
DimPlot(jy_408,  reduction = "umap", group.by = 'seurat_clusters') + NoAxes()

hcoords = df_408 %>% dplyr::select(c('X_horz', 'Y_horz')) %>% as.matrix()
colnames(hcoords) <- c('pixel_1', 'pixel_2')

jy_408[["H"]] <- CreateDimReducObject(embeddings = hcoords, key = "pixel_", assay = DefaultAssay(jy_408))

Merge both datasets and generate a metadata column that corresponds

to the cell

df_164 = data.frame()
for (file_name in list.files(data_dir)){
  print(file_name)
  if(grepl('408', file_name)){
    next
  }
  #if(grepl('408_TC', file_name) | grepl('408_vMS', file_name)){
  #  next
  #}
  df_to_append <- read.table(file.path(data_dir, file_name), sep = ',', header = TRUE)
  while(length(ind <- which(df_to_append$Image.Name == "")) > 0){
    df_to_append$Image.Name[ind] <- df_to_append$Image.Name[ind -1]
  }
  
  colnames(df_to_append) <- toupper(colnames(df_to_append))
  df_to_append <- df_to_append %>%
    mutate(area = strsplit(file_name, '.csv')[[1]])
  
  ## Add relative_XY_position
  
  if(!is_empty(df_164)){
    df_to_append <- df_to_append %>%
          dplyr::select(colnames(df_164))
  }
  df_164 <- rbind(df_164, df_to_append)
}
[1] "164_CC.csv"
[1] "164_MS_CC.csv"
[1] "164_MS_TC.csv"
[1] "164_TC.csv"
[1] "408_CC.csv"
[1] "408_dMS_TC.csv"
[1] "408_MS_CC.csv"
[1] "408_TC.csv"
[1] "408_vMS_TC.csv"
df_164$IMAGE.NAME = unlist(lapply(df_164$IMAGE.NAME, gsub, pattern='CC-', replacement='CC_'))
df_164$IMAGE.NAME = unlist(lapply(df_164$IMAGE.NAME, gsub, pattern='[*]', replacement=''))
df_164$IMAGE.NAME = unlist(lapply(df_164$IMAGE.NAME, gsub, pattern='X', replacement=''))
df_164$IMAGE.NAME = unlist(lapply(df_164$IMAGE.NAME, gsub, pattern='L2', replacement='CC_L2'))
df_164$IMAGE.NAME = unlist(lapply(df_164$IMAGE.NAME, gsub, pattern='L2_', replacement='L2-'))
df_164$IMAGE.NAME = unlist(lapply(df_164$IMAGE.NAME, gsub, pattern='-L2', replacement='_L2'))
tc_cortical_names_bad = df_164[grepl('TC', df_164$area) & grepl('Cortical', df_164$IMAGE.NAME), 'IMAGE.NAME']
df_164[grepl('TC', df_164$area) & grepl('Cortical', df_164$IMAGE.NAME), 'IMAGE.NAME'] = unlist(lapply(tc_cortical_names_bad, gsub, pattern='Cort', replacement='TC_Cort'))
cc_cortical_names_bad = df_164[grepl('CC', df_164$area) & grepl('Cortical', df_164$IMAGE.NAME), 'IMAGE.NAME']
df_164[grepl('CC', df_164$area) & grepl('Cortical', df_164$IMAGE.NAME), 'IMAGE.NAME'] = unlist(lapply(cc_cortical_names_bad, gsub, pattern='Cort', replacement='CC_Cort'))
#df_164$IMAGE.NAME = unlist(lapply(df_164$IMAGE.NAME, gsub, pattern='Tc_12', replacement='TC_12'))
## Missing
#df_164 = df_164[df_164$IMAGE.NAME != 'Layer1', ]
#df_164 = df_164[df_164$IMAGE.NAME != 'TC_1', ]
#df_164 = df_164[df_164$IMAGE.NAME != 'TC_18', ]
#df_164 = df_164[df_164$IMAGE.NAME != 'TC_19', ]
#df_164$IMAGE.NAME = toupper(df_164$IMAGE.NAME)
unique(df_164$IMAGE.NAME)
 [1] "CC_8"         "CC_10"        "CC_Cortical1" "CC_Cortical2" "CC_L2-1"      "CC_L2-2"      "CC_L2-3"      "CC_2"         "CC_3"         "CC_4"        
[11] "CC_5"         "CC_6"         "CC_7"         "CC_9"         "TC_1"         "TC_2"         "TC_3"         "TC_4"         "TC_5"         "TC_6"        
[21] "TC_7"         "TC_8"         "TC_9"         "TC_10"        "TC_Cortical1" "TC_Cortical2" "TC_Cortical3"

Now we know that everything is equal to one another, we should load the variable

image_names = unique(df_164$IMAGE.NAME)
# Preset these variables to negative values so I can easily check if they were updated later
df_164$X = -1
df_164$Y = -1
# set some normalization variables
## This is the size of the image when the pixel values are taken from top left down
IMAGE_SIZE = 1024
## This is the size of an image in the global coordinate space
IMAGE_LEN = 32
TC_IMAGE_HEIGHT = 410
TC_IMAGE_WIDTH = 446
CC_IMAGE_HEIGHT= 422
CC_IMAGE_WIDTH = 214

# Load the dataframe with global and relative coordinates
img_cords = read.table(file.path(meta_dir, '164_pixel_coordinates.csv'), sep = ',', header = TRUE)

images = list.files(meta_dir)
for(image_name in image_names){
    if(grepl('408', image_name)){
      next
    }
    print(image_name)
    split_names = strsplit(image_name, '_')
    cortex = toupper(split_names[[1]][1])
    number = split_names[[1]][2]
    number_csv = paste0('_', number, '.csv')
    filename = images[grepl(cortex, images) & grepl(number_csv, images) & grepl('164', images)]
    coordinates = read.table(file.path(meta_dir, filename), sep = ',', header = TRUE)
    if(image_name == "CC_L2-1"){
      coordinates = coordinates[c(1:37, 39:nrow(coordinates)), ]
    }
    if(cortex == 'CC'){ 
      print(paste('cc', filename, image_name))
      ## So if CC, we add the coordinates for TC_1 to overall image coordinates
      x_adj = img_cords[img_cords$Name == 'TC_1', 'x'] + 
                img_cords[img_cords$Name == 'G_CC1_to_TC1', 'x']
      ## Start from bottom, add the height, subtract TC_1 height, and then global CC1 to TC1
      y_adj = TC_IMAGE_HEIGHT - img_cords[img_cords$Name == 'TC_1', 'y'] +
                img_cords[img_cords$Name == 'G_CC1_to_TC1', 'y'] + CC_IMAGE_HEIGHT
    }else{
      print(paste('tc', filename, image_name))
      x_adj = 0
      y_adj = TC_IMAGE_HEIGHT
    }
    
    ## So don't do repelled for now
    #x_repelled <- (512 - coordinates$X_Coordinate_In_pixels)
    
    ## so the resized x distance is from left, so just add to the box location and adj
    df_164[df_164$IMAGE.NAME == image_name, 'X'] = (coordinates$X_Coordinate_In_pixels / 
                                                      IMAGE_SIZE * IMAGE_LEN) + 
                                                    img_cords[img_cords$Name == image_name, 'x'] + x_adj
    ## resized y distance
    df_164[df_164$IMAGE.NAME == image_name, 'Y'] = y_adj - img_cords[img_cords$Name == image_name, 'y'] - 
                                                      (coordinates$Y_Coordinate_In_pixels / IMAGE_SIZE * 
                                                      IMAGE_LEN)  
}
[1] "CC_8"
[1] "cc 164_CC_ROI_CC_8.csv CC_8"
[1] "CC_10"
[1] "cc 164_CC_ROI_CC_10.csv CC_10"
[1] "CC_Cortical1"
[1] "cc 164_CC_ROI_CC_Cortical1.csv CC_Cortical1"
[1] "CC_Cortical2"
[1] "cc 164_CC_ROI_CC_Cortical2.csv CC_Cortical2"
[1] "CC_L2-1"
[1] "cc 164_CC_ROI_CC_L2-1.csv CC_L2-1"
[1] "CC_L2-2"
[1] "cc 164_CC_ROI_CC_L2-2.csv CC_L2-2"
[1] "CC_L2-3"
[1] "cc 164_CC_ROI_CC_L2-3.csv CC_L2-3"
[1] "CC_2"
[1] "cc 164_CC_ROI_CC_2.csv CC_2"
[1] "CC_3"
[1] "cc 164_CC_ROI_CC_3.csv CC_3"
[1] "CC_4"
[1] "cc 164_CC_ROI_CC_4.csv CC_4"
[1] "CC_5"
[1] "cc 164_CC_ROI_CC_5.csv CC_5"
[1] "CC_6"
[1] "cc 164_CC_ROI_CC_6.csv CC_6"
[1] "CC_7"
[1] "cc 164_CC_ROI_CC_7.csv CC_7"
[1] "CC_9"
[1] "cc 164_CC_ROI_CC_9.csv CC_9"
[1] "TC_1"
[1] "tc 164_TC_ROI_TC_1.csv TC_1"
[1] "TC_2"
[1] "tc 164_TC_ROI_TC_2.csv TC_2"
[1] "TC_3"
[1] "tc 164_TC_ROI_TC_3.csv TC_3"
[1] "TC_4"
[1] "tc 164_TC_ROI_TC_4.csv TC_4"
[1] "TC_5"
[1] "tc 164_TC_ROI_TC_5.csv TC_5"
[1] "TC_6"
[1] "tc 164_TC_ROI_TC_6.csv TC_6"
[1] "TC_7"
[1] "tc 164_TC_ROI_TC_7.csv TC_7"
[1] "TC_8"
[1] "tc 164_TC_ROI_TC_8.csv TC_8"
[1] "TC_9"
[1] "tc 164_TC_ROI_TC_9.csv TC_9"
[1] "TC_10"
[1] "tc 164_TC_ROI_TC_10.csv TC_10"
[1] "TC_Cortical1"
[1] "tc 164_TC_ROI_TC_Cortical1.csv TC_Cortical1"
[1] "TC_Cortical2"
[1] "tc 164_TC_ROI_TC_Cortical2.csv TC_Cortical2"
[1] "TC_Cortical3"
[1] "tc 164_TC_ROI_TC_Cortical3.csv TC_Cortical3"

We have the coordinates for 408_TC and others

rownames(df_164) = 1:nrow(df_164)
jy_164 = df_164 %>%
  dplyr::select(-c(area, IMAGE.NAME, X, Y)) %>%
  t() %>%
  CreateSeuratObject()

just set everything from below 1 in ratio to zero

jy_164 <- NormalizeData(jy_164, scale.factor = 1e5) ###
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
normed = GetAssayData(jy_164, slot = 'data')
normed[normed < 3] = 0
jy_164 <- SetAssayData(jy_164, slot = 'data', normed)
jy_164 <- FindVariableFeatures(jy_164, selection.method = "vst")
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
all.genes <- rownames(jy_164)
jy_164 <- ScaleData(jy_164, features = all.genes)
Centering and scaling data matrix

  |                                                                                                                                                            
  |                                                                                                                                                      |   0%
  |                                                                                                                                                            
  |======================================================================================================================================================| 100%
jy_164 <- RunPCA(jy_164, approx = FALSE)
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
PC_ 1 
Positive:  NKX2.1, MAF1, SCGN, PROX1, GAD1, SP8, VIP, LHX6, GSX2, DCX 
       TSHZ1, CXCR7, COUPTF2, SST, DLX2, LRP8 
Negative:  KIA0319, SATB2, ASCL1, PAX6, CALB2, DCDC2, RELN, NCAM1, CXCL12, TBR1 
       EMX1, EGFR, CXCL14, VLDLR, CXCR4, EOMES 
PC_ 2 
Positive:  DCX, SCGN, SP8, TBR1, EGFR, SATB2, DCDC2, EOMES, NKX2.1, LRP8 
       KIA0319, NCAM1, EMX1, CXCR7, TSHZ1, CALB2 
Negative:  GAD1, VIP, CXCR4, LHX6, MAF1, DLX2, SST, RELN, CXCL12, CXCL14 
       COUPTF2, PROX1, PAX6, GSX2, ASCL1, VLDLR 
PC_ 3 
Positive:  COUPTF2, SP8, PROX1, SCGN, EOMES, TBR1, MAF1, CXCR7, NKX2.1, GSX2 
       TSHZ1, LHX6, DCDC2, EGFR, VIP, LRP8 
Negative:  SST, ASCL1, PAX6, RELN, CALB2, CXCL14, EMX1, CXCL12, DLX2, NCAM1 
       GAD1, CXCR4, KIA0319, DCX, VLDLR, SATB2 
PC_ 4 
Positive:  TSHZ1, PROX1, SP8, ASCL1, DLX2, VLDLR, NKX2.1, NCAM1, PAX6, CXCR7 
       SCGN, EMX1, RELN, CXCL14, VIP, KIA0319 
Negative:  LRP8, TBR1, EOMES, CALB2, LHX6, GSX2, COUPTF2, DCX, MAF1, GAD1 
       CXCL12, DCDC2, SATB2, EGFR, CXCR4, SST 
PC_ 5 
Positive:  PAX6, COUPTF2, RELN, TSHZ1, DLX2, SP8, CXCL12, SCGN, TBR1, GSX2 
       LRP8, DCX, SATB2, LHX6, ASCL1, GAD1 
Negative:  NKX2.1, DCDC2, EOMES, VLDLR, NCAM1, SST, CXCR7, EMX1, CXCR4, EGFR 
       MAF1, KIA0319, VIP, PROX1, CXCL14, CALB2 
jy_164 <- FindNeighbors(jy_164, dims = 1:30)
Computing nearest neighbor graph
Computing SNN
jy_164 <- FindClusters(jy_164, resolution = 0.8)
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 802
Number of edges: 30100

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6519
Number of communities: 6
Elapsed time: 0 seconds
jy_164 <- RunUMAP(jy_164, dims = 1:30)
17:52:24 UMAP embedding parameters a = 0.9922 b = 1.112
17:52:24 Read 802 rows and found 30 numeric columns
17:52:24 Using Annoy for neighbor search, n_neighbors = 30
17:52:24 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:52:25 Writing NN index file to temp file /tmp/RtmpKuWa3v/filebb88138feb5f2
17:52:25 Searching Annoy index using 1 thread, search_k = 3000
17:52:25 Annoy recall = 100%
17:52:25 Commencing smooth kNN distance calibration using 1 thread
17:52:25 Initializing from normalized Laplacian + noise
17:52:25 Commencing optimization for 500 epochs, with 30056 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:52:26 Optimization finished
DimPlot(jy_164,  reduction = "umap", group.by = 'seurat_clusters') + NoAxes()

unique(df_164$IMAGE.NAME)
 [1] "CC_8"         "CC_10"        "CC_Cortical1" "CC_Cortical2" "CC_L2-1"      "CC_L2-2"      "CC_L2-3"      "CC_2"         "CC_3"         "CC_4"        
[11] "CC_5"         "CC_6"         "CC_7"         "CC_9"         "TC_1"         "TC_2"         "TC_3"         "TC_4"         "TC_5"         "TC_6"        
[21] "TC_7"         "TC_8"         "TC_9"         "TC_10"        "TC_Cortical1" "TC_Cortical2" "TC_Cortical3"
images_ordered = c('TC_Cortical3', 'TC_Cortical2', 'TC_Cortical1', 'TC_10', 'TC_9', 'TC_8', 'TC_7', 'TC_6', 'TC_5', 'TC_4', 'TC_3', 'TC_2','TC_1','CC_2','CC_3',
           'CC_4', 'CC_5', 'CC_6', 'CC_7', 'CC_8', 'CC_9', 'CC_10',
           'CC_L2-1', 'CC_L2-2', 'CC_L2-3', 'CC_Cortical1', 'CC_Cortical2')
x_horz = 1:length(images_ordered) * 35
y_horz = rep(0, length(images_ordered))
horz_embedding = data.frame()
df_164$X_horz = -1
df_164$Y_horz = -1

images = list.files(meta_dir)
for(i in 1:length(images_ordered)){
    image_name = images_ordered[i]
    print(image_name)
    split_names = strsplit(image_name, '_')
    cortex = toupper(split_names[[1]][1])
    number = split_names[[1]][2]
    number_csv = paste0('_', number, '.csv')
    filename = images[grepl(cortex, images) & grepl(number_csv, images) & grepl('164', images)]
    coordinates = read.table(file.path(meta_dir, filename), sep = ',', header = TRUE)
    if(image_name == "CC_L2-1"){
      coordinates = coordinates[c(1:37, 39:nrow(coordinates)), ]
    }
    ## checked already that lists are equal, missing 1, 18, 19 for now, layer 1 and others
 
    ## so this is a little tricky, so need to get it right
    ## Remember, it is the top right that the coordinate is coming from, but
    ## the bottom right is the new coordinate space.
    ## so first when we get the original coordinate space, to set to relative
    ## of bottom would be the same X, but 1024 - Y
    
    ## push out the coordinates for better visualization
    #x_repelled <- (512 - coordinates$X_Coordinate_In_pixels)
    
    
    df_164[df_164$IMAGE.NAME == image_name, 'X_horz'] = (coordinates$X_Coordinate_In_pixels / 
                                                      IMAGE_SIZE * IMAGE_LEN) + y_horz[i]
    df_164[df_164$IMAGE.NAME == image_name, 'Y_horz'] = ((1024-coordinates$Y_Coordinate_In_pixels) / 
                                                      IMAGE_SIZE * IMAGE_LEN) + x_horz[i]
}
[1] "TC_Cortical3"
[1] "TC_Cortical2"
[1] "TC_Cortical1"
[1] "TC_10"
[1] "TC_9"
[1] "TC_8"
[1] "TC_7"
[1] "TC_6"
[1] "TC_5"
[1] "TC_4"
[1] "TC_3"
[1] "TC_2"
[1] "TC_1"
[1] "CC_2"
[1] "CC_3"
[1] "CC_4"
[1] "CC_5"
[1] "CC_6"
[1] "CC_7"
[1] "CC_8"
[1] "CC_9"
[1] "CC_10"
[1] "CC_L2-1"
[1] "CC_L2-2"
[1] "CC_L2-3"
[1] "CC_Cortical1"
[1] "CC_Cortical2"
hcoords = df_164 %>% dplyr::select(c('X_horz', 'Y_horz')) %>% as.matrix()
colnames(hcoords) <- c('pixel_1', 'pixel_2')

jy_164[["H"]] <- CreateDimReducObject(embeddings = hcoords, key = "pixel_", assay = DefaultAssay(jy_164))
jy_164<- RenameCells(jy_164, c(outer('164_', 1:ncol(jy_164), FUN=paste0)))
jy_164$area = df_164$area
jy_408<- RenameCells(jy_408, c(outer('408_', 1:ncol(jy_408), FUN=paste0)))
jy_408$area = df_408$area
jy_all <- merge(jy_164, jy_408)
jy_all <- NormalizeData(jy_all, scale.factor = 1e5) ###
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
normed = GetAssayData(jy_all, slot = 'data')
normed[normed < 3] = 0
jy_all <- SetAssayData(jy_all, slot = 'data', normed)
jy_all <- FindVariableFeatures(jy_all, selection.method = "vst")
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
all.genes <- rownames(jy_all)
jy_all <- ScaleData(jy_all, features = all.genes)
Centering and scaling data matrix

  |                                                                                                                                                            
  |                                                                                                                                                      |   0%
  |                                                                                                                                                            
  |======================================================================================================================================================| 100%
jy_all <- RunPCA(jy_all, approx = FALSE)
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
Warning: Requested number is larger than the number of available items (32). Setting to 32.
PC_ 1 
Positive:  ASCL1, CXCR4, KIA0319, SATB2, RELN, PAX6, CXCL12, EMX1, VIP, CALB2 
       DCDC2, DLX2, VLDLR, EOMES, SST, LHX6 
Negative:  DCX, SCGN, GSX2, NKX2.1, TSHZ1, TBR1, LRP8, COUPTF2, SP8, EGFR 
       CXCR7, CXCL14, PROX1, MAF1, GAD1, NCAM1 
PC_ 2 
Positive:  GAD1, MAF1, VIP, LHX6, NKX2.1, PROX1, DLX2, CXCR4, SST, TSHZ1 
       SP8, GSX2, VLDLR, RELN, CXCR7, COUPTF2 
Negative:  TBR1, DCX, KIA0319, DCDC2, LRP8, EOMES, SATB2, EGFR, CALB2, CXCL12 
       NCAM1, EMX1, PAX6, ASCL1, CXCL14, SCGN 
PC_ 3 
Positive:  NCAM1, RELN, ASCL1, PAX6, SATB2, SST, MAF1, EMX1, VLDLR, EGFR 
       CXCR7, CXCL14, TSHZ1, DCX, SCGN, GSX2 
Negative:  COUPTF2, LRP8, LHX6, EOMES, TBR1, SP8, GAD1, DLX2, CXCR4, PROX1 
       NKX2.1, CALB2, CXCL12, DCDC2, VIP, KIA0319 
PC_ 4 
Positive:  SST, RELN, DLX2, LRP8, LHX6, PAX6, GAD1, CALB2, CXCL12, CXCR4 
       TBR1, VIP, ASCL1, SATB2, KIA0319, EMX1 
Negative:  TSHZ1, PROX1, CXCR7, NCAM1, SCGN, NKX2.1, EGFR, VLDLR, SP8, CXCL14 
       GSX2, DCX, DCDC2, COUPTF2, EOMES, MAF1 
PC_ 5 
Positive:  SP8, SCGN, PAX6, DLX2, EMX1, NKX2.1, SATB2, COUPTF2, ASCL1, SST 
       RELN, PROX1, VLDLR, TBR1, DCX, KIA0319 
Negative:  GAD1, CXCL14, NCAM1, EGFR, VIP, LRP8, DCDC2, CXCR4, MAF1, CXCR7 
       GSX2, LHX6, CXCL12, EOMES, CALB2, TSHZ1 
jy_all <- FindNeighbors(jy_all, dims = 1:30)
Computing nearest neighbor graph
Computing SNN
jy_all <- FindClusters(jy_all, resolution = 1.5)
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1815
Number of edges: 61694

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6181
Number of communities: 13
Elapsed time: 0 seconds
jy_all <- RunUMAP(jy_all, dims = 1:30)
17:52:28 UMAP embedding parameters a = 0.9922 b = 1.112
17:52:28 Read 1815 rows and found 30 numeric columns
17:52:28 Using Annoy for neighbor search, n_neighbors = 30
17:52:28 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:52:28 Writing NN index file to temp file /tmp/RtmpKuWa3v/filebb88165be5c09
17:52:28 Searching Annoy index using 1 thread, search_k = 3000
17:52:29 Annoy recall = 100%
17:52:29 Commencing smooth kNN distance calibration using 1 thread
17:52:30 Initializing from normalized Laplacian + noise
17:52:30 Commencing optimization for 500 epochs, with 70074 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
17:52:32 Optimization finished
DimPlot(jy_all,  reduction = "umap", group.by = 'seurat_clusters') + NoAxes()

big_dimplot <- function(sobj, grep_pattern){
  dp = DimPlot(sobj, cells.highlight = list(imp = which(grepl(grep_pattern, sobj$area))))
  dp <- dp + scale_color_manual(values = c('grey90', '#1982c4'), labels=c('other', grep_pattern)) + NoAxes()
}
patterns = c('408_CC', '408_MS_CC', 'vMS_TC', 'dMS_TC', '408_TC', '164_CC', '164_MS_CC', '164_MS_TC',  '164_TC')
plots <- lapply(1:length(patterns), function(i){
    big_dimplot(jy_all, grep_pattern = patterns[i])
  })
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
areas = plot_grid(plotlist = plots, label_size = 10, nrow = 3)
areas

ggsave(plot = areas, filename = 'test_all_area_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 14, height = 8, dpi = 150)

plot_clusters_umap(jy_all, clustering ='RNA_snn_res.1.5', pt.size = 2.0)
Error in plot_clusters_umap(jy_all, clustering = "RNA_snn_res.1.5", pt.size = 2) : 
  could not find function "plot_clusters_umap"
jy_all.markers <- FindAllMarkers(jy_all, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++                                              | 8 % ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++++++                              | 38% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 8 % ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++++++                              | 38% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
jy_all.markers %>%
   group_by(cluster) %>%
   slice_max(n = 32, order_by = avg_log2FC)
clusters_164 = jy_all$RNA_snn_res.1.5[1:ncol(jy_164)]
jy_164$unified_clusters = clusters_164
clusters_408 = jy_all$RNA_snn_res.1.5[(ncol(jy_164)+1):ncol(jy_all)]
jy_408$unified_clusters = clusters_408
clusters = as.numeric(sort(unique(jy_408$unified_clusters)))
plots <- lapply(1:length(clusters), function(i){
    plot_clusters_vertical_spatial(jy_408, cluster = clusters[i], pt.size = 1, clustering = 'unified_clusters', anterior = FALSE)
  })
verts= plot_grid(plotlist = plots, label_size = 10, nrow = 1)
ggsave(plot = verts, filename = 'test_408_unified_vertical_cluster_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 5, height = 8, dpi = 150)
clusters = as.numeric(sort(unique(jy_164$unified_clusters)))
plots <- lapply(1:length(clusters), function(i){
    plot_clusters_vertical_spatial(jy_164, cluster = clusters[i], pt.size = 1, clustering = 'unified_clusters', anterior = TRUE)
  })
verts= plot_grid(plotlist = plots, label_size = 10, nrow = 1)
ggsave(plot = verts, filename = 'test_164_unified_vertical_cluster_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 5, height = 8, dpi = 150)
genes = rownames(markers2)
plots <- lapply(1:length(genes), function(i){
    plot_features_umap(jy_all, genes[i], pt.size = 0.5)
  })
umaps = plot_grid(plotlist = plots, label_size = 10, nrow = 1)
umaps
ggsave(plot = umaps, filename = 'cluster7_markers_all_umapl_expr_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 8, height = 1, dpi = 150)
jy_all_7.markers <- FindMarkers(jy_all, ident.1 = 7, ident.2 = NULL, only.pos = FALSE)
markers2 = jy_all_7.markers %>%
   slice_max(n = 5, order_by = avg_log2FC)
markers2
new.cluster.ids = c('TBR1+/LRP8+ MS to TC', 
              'PROX1 and NKX2.1 Immature INs',
'Immature CALB2+ CGE IN',
 'Excitatory CXCL12+ Neurons',
'GSX2- dLGE INs',
'Mature, SST+ MGE INs',
 'Mature, VIP+ CGE INs',
 'MAF1+/TSHZ1+ Immature INs',
 'Layer 2 Excitatory Neurons',
 'CXCR4+ Posterior, MS to TC INs',
'EMX1+/NKX2.1+ Anterior, MS to CC INs',
 'EMX1+/LHX6+ Posterior, MS to CC INs',
 'GSX2+/RELN+/PAX6+ dLGE INs')
names(new.cluster.ids) <- levels(jy_all)
jy_all <- RenameIdents(jy_all, new.cluster.ids)
library(ggrepel)
plot_clusters_umap <- function(sobj, clustering, pt.size = 3, space = "umap")
{
  coordinates <- Embeddings(sobj, reduction = space)
  #expmat <- sobj[[clustering]]
  expmat  = as.character(Idents(jy_all))
  gene_df <- as.data.frame(cbind(coordinates, expmat))
  colnames(gene_df) <- c('X', 'Y', 'expr')
  gene_df$X = as.numeric(gene_df$X)
  gene_df$Y = as.numeric(gene_df$Y)
  summary_gene_df = gene_df %>% dplyr::group_by(expr) %>% dplyr::summarise(xmean = mean(X), ymean = mean(Y))
  plot <- ggplot(gene_df, aes(x = X, y = Y, color = as.factor(expr))) + geom_point(size = pt.size, alpha = 0.8) + #+ geom_label_repel(data = summary_gene_df,
                                                                                                                # mapping = aes(x = xmean, 
                           #y = ymean), 
                           #label = summary_gene_df$expr) +
            theme_classic() + ggtitle(clustering) + NoAxes() + #NoLegend()  + 
    theme(title = element_text(face = 'bold', size = rel(1), hjust = 1)) 
  cluster_colors = scales::hue_pal()(length(unique(expmat)))
  plot = plot + scale_colour_manual(values = cluster_colors)
  return(plot)
}

plot_clusters_umap(jy_all, clustering = '', pt.size = 2.0)
immature_IN_names = c('PROX1 and NKX2.1 Immature INs',
'Immature CALB2+ CGE interneuron',
 'MAF1+/TSHZ1+ Immature INs',
 'CXCR4+ Posterior, MS to TC INs',
'EMX1+/NKX2.1+ Anterior, MS to CC INs',
 'EMX1+/LHX6+ Posterior, MS to CC INs',
 'GSX2+/RELN+/PAX6+ Clump')

jy_immature <- jy_all[, Idents(jy_all) %in% immature_IN_names]

breakpoints = 1:20/10+0.3
plots = list()
jy_immature <- FindNeighbors(jy_immature, dims = 1:30)
Computing nearest neighbor graph
Computing SNN
i = 1
for (breakpoint in breakpoints){
  jy_immature <- FindClusters(jy_immature, resolution = breakpoint)
  jy_immature <- RunUMAP(jy_immature, dims = 1:30)
  jy_immature.markers <- FindAllMarkers(jy_immature, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
  labels = jy_immature.markers %>%
   group_by(cluster) %>%
   slice_max(n = 1, order_by = avg_log2FC)
  new.cluster.ids <- labels$gene
  names(new.cluster.ids) <- levels(jy_immature)
  jy_immature <- RenameIdents(jy_immature, new.cluster.ids)
  plots[[i]] = DimPlot(jy_immature, reduction = "umap", pt.size = 1, label = TRUE) + NoAxes() + NoLegend() + ggtitle(breakpoint)
  i = i + 1
}
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7886
Number of communities: 5
Elapsed time: 0 seconds
00:33:01 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:01 Read 786 rows and found 30 numeric columns
00:33:01 Using Annoy for neighbor search, n_neighbors = 30
00:33:01 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:01 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f044020edf1
00:33:01 Searching Annoy index using 1 thread, search_k = 3000
00:33:01 Annoy recall = 100%
00:33:01 Commencing smooth kNN distance calibration using 1 thread
00:33:02 Initializing from normalized Laplacian + noise
00:33:02 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:03 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |+++++++                                           | 13% ~00s          
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++                          | 47% ~00s          
  |+++++++++++++++++++++++++++                       | 53% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7560
Number of communities: 6
Elapsed time: 0 seconds
00:33:03 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:03 Read 786 rows and found 30 numeric columns
00:33:03 Using Annoy for neighbor search, n_neighbors = 30
00:33:03 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:04 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f0427cd431a
00:33:04 Searching Annoy index using 1 thread, search_k = 3000
00:33:04 Annoy recall = 100%
00:33:04 Commencing smooth kNN distance calibration using 1 thread
00:33:05 Initializing from normalized Laplacian + noise
00:33:05 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:06 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7291
Number of communities: 6
Elapsed time: 0 seconds
00:33:06 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:06 Read 786 rows and found 30 numeric columns
00:33:06 Using Annoy for neighbor search, n_neighbors = 30
00:33:06 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:06 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f045dbf24c
00:33:06 Searching Annoy index using 1 thread, search_k = 3000
00:33:07 Annoy recall = 100%
00:33:07 Commencing smooth kNN distance calibration using 1 thread
00:33:08 Initializing from normalized Laplacian + noise
00:33:08 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:09 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7022
Number of communities: 6
Elapsed time: 0 seconds
00:33:09 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:09 Read 786 rows and found 30 numeric columns
00:33:09 Using Annoy for neighbor search, n_neighbors = 30
00:33:09 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:09 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f043bd0dbd8
00:33:09 Searching Annoy index using 1 thread, search_k = 3000
00:33:09 Annoy recall = 100%
00:33:10 Commencing smooth kNN distance calibration using 1 thread
00:33:10 Initializing from normalized Laplacian + noise
00:33:10 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:12 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6773
Number of communities: 6
Elapsed time: 0 seconds
00:33:12 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:12 Read 786 rows and found 30 numeric columns
00:33:12 Using Annoy for neighbor search, n_neighbors = 30
00:33:12 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:12 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f046b090e3b
00:33:12 Searching Annoy index using 1 thread, search_k = 3000
00:33:12 Annoy recall = 100%
00:33:13 Commencing smooth kNN distance calibration using 1 thread
00:33:13 Initializing from normalized Laplacian + noise
00:33:13 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:14 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6532
Number of communities: 6
Elapsed time: 0 seconds
00:33:15 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:15 Read 786 rows and found 30 numeric columns
00:33:15 Using Annoy for neighbor search, n_neighbors = 30
00:33:15 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:15 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f042c056235
00:33:15 Searching Annoy index using 1 thread, search_k = 3000
00:33:15 Annoy recall = 100%
00:33:16 Commencing smooth kNN distance calibration using 1 thread
00:33:16 Initializing from normalized Laplacian + noise
00:33:16 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:17 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6298
Number of communities: 7
Elapsed time: 0 seconds
00:33:18 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:18 Read 786 rows and found 30 numeric columns
00:33:18 Using Annoy for neighbor search, n_neighbors = 30
00:33:18 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:18 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f0447441d4f
00:33:18 Searching Annoy index using 1 thread, search_k = 3000
00:33:18 Annoy recall = 100%
00:33:18 Commencing smooth kNN distance calibration using 1 thread
00:33:19 Initializing from normalized Laplacian + noise
00:33:19 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:20 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6063
Number of communities: 7
Elapsed time: 0 seconds
00:33:21 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:21 Read 786 rows and found 30 numeric columns
00:33:21 Using Annoy for neighbor search, n_neighbors = 30
00:33:21 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:21 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f0433a47f83
00:33:21 Searching Annoy index using 1 thread, search_k = 3000
00:33:21 Annoy recall = 100%
00:33:21 Commencing smooth kNN distance calibration using 1 thread
00:33:22 Initializing from normalized Laplacian + noise
00:33:22 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:23 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5897
Number of communities: 9
Elapsed time: 0 seconds
00:33:24 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:24 Read 786 rows and found 30 numeric columns
00:33:24 Using Annoy for neighbor search, n_neighbors = 30
00:33:24 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:24 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f04154a3cea
00:33:24 Searching Annoy index using 1 thread, search_k = 3000
00:33:24 Annoy recall = 100%
00:33:24 Commencing smooth kNN distance calibration using 1 thread
00:33:25 Initializing from normalized Laplacian + noise
00:33:25 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:26 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5764
Number of communities: 9
Elapsed time: 0 seconds
00:33:27 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:27 Read 786 rows and found 30 numeric columns
00:33:27 Using Annoy for neighbor search, n_neighbors = 30
00:33:27 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:27 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f045571094e
00:33:27 Searching Annoy index using 1 thread, search_k = 3000
00:33:27 Annoy recall = 100%
00:33:27 Commencing smooth kNN distance calibration using 1 thread
00:33:28 Initializing from normalized Laplacian + noise
00:33:28 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:29 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5635
Number of communities: 10
Elapsed time: 0 seconds
00:33:30 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:30 Read 786 rows and found 30 numeric columns
00:33:30 Using Annoy for neighbor search, n_neighbors = 30
00:33:30 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:30 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f046209aee5
00:33:30 Searching Annoy index using 1 thread, search_k = 3000
00:33:30 Annoy recall = 100%
00:33:30 Commencing smooth kNN distance calibration using 1 thread
00:33:31 Initializing from normalized Laplacian + noise
00:33:31 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:32 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5507
Number of communities: 10
Elapsed time: 0 seconds
00:33:33 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:33 Read 786 rows and found 30 numeric columns
00:33:33 Using Annoy for neighbor search, n_neighbors = 30
00:33:33 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:33 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f04418e8957
00:33:33 Searching Annoy index using 1 thread, search_k = 3000
00:33:33 Annoy recall = 100%
00:33:33 Commencing smooth kNN distance calibration using 1 thread
00:33:34 Initializing from normalized Laplacian + noise
00:33:34 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:35 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |++++                                              | 8 % ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++++++                              | 38% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5380
Number of communities: 10
Elapsed time: 0 seconds
00:33:36 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:36 Read 786 rows and found 30 numeric columns
00:33:36 Using Annoy for neighbor search, n_neighbors = 30
00:33:36 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:36 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f0424306e45
00:33:36 Searching Annoy index using 1 thread, search_k = 3000
00:33:36 Annoy recall = 100%
00:33:36 Commencing smooth kNN distance calibration using 1 thread
00:33:37 Initializing from normalized Laplacian + noise
00:33:37 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:38 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |++++                                              | 8 % ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++++++                              | 38% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5250
Number of communities: 11
Elapsed time: 0 seconds
00:33:39 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:39 Read 786 rows and found 30 numeric columns
00:33:39 Using Annoy for neighbor search, n_neighbors = 30
00:33:39 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:39 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f0427a7e0aa
00:33:39 Searching Annoy index using 1 thread, search_k = 3000
00:33:39 Annoy recall = 100%
00:33:39 Commencing smooth kNN distance calibration using 1 thread
00:33:40 Initializing from normalized Laplacian + noise
00:33:40 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:41 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 8 % ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++++++                              | 38% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5139
Number of communities: 11
Elapsed time: 0 seconds
00:33:42 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:42 Read 786 rows and found 30 numeric columns
00:33:42 Using Annoy for neighbor search, n_neighbors = 30
00:33:42 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:42 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f0428ceba0c
00:33:42 Searching Annoy index using 1 thread, search_k = 3000
00:33:42 Annoy recall = 100%
00:33:43 Commencing smooth kNN distance calibration using 1 thread
00:33:43 Initializing from normalized Laplacian + noise
00:33:43 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:44 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 8 % ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++++++                              | 38% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5031
Number of communities: 11
Elapsed time: 0 seconds
00:33:45 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:45 Read 786 rows and found 30 numeric columns
00:33:45 Using Annoy for neighbor search, n_neighbors = 30
00:33:45 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:45 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f044337e03d
00:33:45 Searching Annoy index using 1 thread, search_k = 3000
00:33:45 Annoy recall = 100%
00:33:46 Commencing smooth kNN distance calibration using 1 thread
00:33:46 Initializing from normalized Laplacian + noise
00:33:46 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:47 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.4922
Number of communities: 11
Elapsed time: 0 seconds
00:33:48 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:48 Read 786 rows and found 30 numeric columns
00:33:48 Using Annoy for neighbor search, n_neighbors = 30
00:33:48 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:48 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f044b2835a6
00:33:48 Searching Annoy index using 1 thread, search_k = 3000
00:33:48 Annoy recall = 100%
00:33:49 Commencing smooth kNN distance calibration using 1 thread
00:33:49 Initializing from normalized Laplacian + noise
00:33:49 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:50 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.4812
Number of communities: 12
Elapsed time: 0 seconds
1 singletons identified. 11 final clusters.
00:33:51 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:51 Read 786 rows and found 30 numeric columns
00:33:51 Using Annoy for neighbor search, n_neighbors = 30
00:33:51 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:51 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f0457c42863
00:33:51 Searching Annoy index using 1 thread, search_k = 3000
00:33:51 Annoy recall = 100%
00:33:52 Commencing smooth kNN distance calibration using 1 thread
00:33:52 Initializing from normalized Laplacian + noise
00:33:53 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:54 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.4704
Number of communities: 13
Elapsed time: 0 seconds
1 singletons identified. 12 final clusters.
00:33:54 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:54 Read 786 rows and found 30 numeric columns
00:33:54 Using Annoy for neighbor search, n_neighbors = 30
00:33:54 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:54 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f0447bc00b8
00:33:54 Searching Annoy index using 1 thread, search_k = 3000
00:33:55 Annoy recall = 100%
00:33:55 Commencing smooth kNN distance calibration using 1 thread
00:33:56 Initializing from normalized Laplacian + noise
00:33:56 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:57 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 786
Number of edges: 29724

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.4600
Number of communities: 12
Elapsed time: 0 seconds
00:33:57 UMAP embedding parameters a = 0.9922 b = 1.112
00:33:57 Read 786 rows and found 30 numeric columns
00:33:57 Using Annoy for neighbor search, n_neighbors = 30
00:33:57 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:33:58 Writing NN index file to temp file /tmp/RtmpIqRk2o/file74f0435b8e4be
00:33:58 Searching Annoy index using 1 thread, search_k = 3000
00:33:58 Annoy recall = 100%
00:33:58 Commencing smooth kNN distance calibration using 1 thread
00:33:59 Initializing from normalized Laplacian + noise
00:33:59 Commencing optimization for 500 epochs, with 29334 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
00:34:00 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
marrangeGrob(plots, nrow=2, ncol=2)

ml <- marrangeGrob(plots, nrow=2, ncol=2)
ggsave(filename = 'immature_sequential_clustering_umaps.pdf', path = file.path(output_dir_plot, '20220721_1'), ml)
Saving 7.29 x 4.5 in image

make an easy mapping

get_broad_type <- function(celltype){
  Excitatory =  c('Layer 2 Excitatory Neurons',
                  'Excitatory CXCL12+ Neurons',
                  'Cajal Retzius Cells',
                  'Immature CALB2+ CGE interneuron')
  Mature_inhib = c('Mature, SST+ MGE INs',
                   "Mature, VIP+ CGE INs")
  other = c('TBR1+/LRP8+ MS to TC')
    
  immature_neurons = c(
  'PROX1 and NKX2.1 Immature INs',
 'MAF1+/TSHZ1+ Immature INs',
 'CXCR4+ Posterior, MS to TC INs',
'EMX1+/NKX2.1+ Anterior, MS to CC INs',
 'EMX1+/LHX6+ Posterior, MS to CC INs',
 'GSX2+/RELN+/PAX6+ Clump')
  if(celltype %in% Excitatory){
    return("EN")
  }else if(celltype %in% Mature_inhib){
    return('Mature IN')
  } else if(celltype %in% immature_neurons){
    return('Immature IN')
  } else{return('other')} 
}

do heatmap real quick

# get the scaled data
scaled_values = as.matrix(GetAssayData(jy_all, slot = "data"))

genes_to_remove = c('DCX', 'DCDC2', 'KIA0319', 'NCAM1')

#cluster_ordering = sort(as.character(Idents(jy_all)), index.return = TRUE)
scaled_values = scaled_values[!rownames(scaled_values)%in% genes_to_remove,]

### Apply separate clustering, need to look into why 
hr <- hclust(as.dist(1-cor(t(scaled_values), method="pearson")), method = "complete")
#hc <- hclust(as.dist(1-cor(scaled_values, method="spearman")), method="complete")

broad_labels = unlist(lapply(1:ncol(scaled_values), function(i){
  get_broad_type(as.character(Idents(jy_all))[i])
}))
#broad_order = sort(broad_labels, index.return = TRUE)
#final_ox = order( cluster_ordering$x, broad_order$x)
#final_ox = broad_order$ix

#gaps = c()
#for(i in 2:length(broad_order$x)){
#  if(broad_order$x[i] != broad_order$x[i-1]){
#    gaps = c(gaps, i)
#    print(i)
#  }
#}

broad_area_sorted = sort(jy_all$area, index.return = TRUE)
final_ox = broad_area_sorted$ix

gaps = c()
for(i in 2:length(broad_area_sorted$x)){
  if(broad_area_sorted$x[i] != broad_area_sorted$x[i-1]){
    gaps = c(gaps, i)
    print(i)
  }
}
[1] 250
[1] 431
[1] 699
[1] 803
[1] 974
[1] 1282
[1] 1536
[1] 1626
### Now arrange everything

annotation <- data.frame(cell_type = as.character(Idents(jy_all)),
                         #cell_class = broad_labels,
                         area = jy_all$area)
rownames(annotation) <- colnames(scaled_values) # check out the row names of annotation

scaled_values[, final_ox] %>%
  pheatmap(annotation_col = annotation, 
           color = colorRampPalette(brewer.pal(n = 9, name = "Purples"))(100),
  #breaks = seq(from= -5, to = 5, by = 11/100.), 
  cluster_rows = hr, #cluster_cols = hc, 
  #cluster_rows = TRUE,
  cluster_cols = FALSE,
  #clustering_distance_rows = "correlation", 
  #clustering_distance_cols = "correlation",
  fontsize_row = 8, fontsize_col = 4, show_colnames = FALSE, gaps_col = gaps,
           show_rownames = TRUE, cell_width = 10, cellheight = 8, width = 10, height = 14)#,

          #  filename = file.path(file.path(output_dir_plot, '20220721_1'), 'ncol_20_sort_by_broad_type_gaps.png'))
plot_features_umap <- function(sobj, gene, pt.size = 3, alpha = 0.8, space = "umap", color = '#CB2A55', flipped = FALSE)
{
  coordinates <- Embeddings(sobj, reduction = space)
  expmat <- as.matrix(FetchData(sobj, gene))
  gene_df <- as.data.frame(cbind(coordinates, expmat))
  colnames(gene_df) <- c('X', 'Y', 'expr')
  gene_df <- gene_df %>% dplyr::arrange(!is.na(expr), expr)
  colors = c('grey90', 'grey90', color)
  gene_df$expr[gene_df$expr == 0] = NA
  plot <- ggplot(gene_df, aes(x = X, y = Y, color = expr)) + geom_point(size = pt.size, alpha = alpha)+  
            theme_classic() + ggtitle(gene) +  scale_color_gradient(na.value = colors[1], low = colors[2], high = colors[3], labels = NULL)  + theme(title = element_text(face = 'bold', size = rel(1), hjust = 1)) 
  if(flipped){
    plot <- plot + scale_x_reverse() + scale_y_reverse()
  }
  return(plot + NoAxes() + NoLegend())
}
genes = rownames(jy_immature)
plots <- lapply(1:length(genes), function(i){
    plot_features_umap(jy_immature, genes[i], pt.size = 0.5)
  })
umaps = plot_grid(plotlist = plots, label_size = 10, nrow = 4)
umaps

ggsave(plot = umaps, filename = 'test_immature_umapl_expr_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 10, height = 4, dpi = 150)
big_dimplot <- function(sobj, grep_pattern){
  dp = DimPlot(sobj, cells.highlight = list(imp = which(grepl(grep_pattern, sobj$area))))
  dp <- dp + scale_color_manual(values = c('grey90', '#1982c4'), labels=c('other', grep_pattern)) + NoAxes()
}
patterns = c('408_CC', '408_MS_CC', 'vMS_TC', 'dMS_TC', '408_TC', '164_CC', '164_MS_CC', '164_MS_TC',  '164_TC')
plots <- lapply(1:length(patterns), function(i){
    big_dimplot(jy_immature, grep_pattern = patterns[i])
  })
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
areas = plot_grid(plotlist = plots, label_size = 10, nrow = 3)
areas

ggsave(plot = areas, filename = 'test_immature_area_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 14, height = 8, dpi = 150)
jy_immature$seurat_clusters = jy_immature$RNA_snn_res.1.1
Idents(jy_immature) = jy_immature$seurat_clusters

DimPlot(jy_immature)

genes = rownames(markers2)
plots <- lapply(1:length(genes), function(i){
    plot_features_umap(jy_immature, genes[i], pt.size = 0.5)
  })
umaps = plot_grid(plotlist = plots, label_size = 10, nrow = 1)
umaps

ggsave(plot = umaps, filename = 'cluster4_markers_immature_umapl_expr_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 4, height = 1, dpi = 150)
jy_immature.markers <- FindMarkers(jy_immature, ident.1 = 3, ident.2 = 4, only.pos = FALSE)

  |                                                  | 0 % ~calculating  
  |++                                                | 4 % ~00s          
  |++++                                              | 7 % ~00s          
  |++++++                                            | 11% ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++                                         | 18% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |+++++++++++++++++                                 | 32% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++                              | 39% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++                   | 61% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++                | 68% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
markers2 = jy_immature.markers %>%
   slice_max(n = 8, order_by = avg_log2FC)
markers2

clusters = as.numeric(sort(unique(jy_408$unified_clusters)))
plots <- lapply(1:length(clusters), function(i){
    plot_clusters_vertical_spatial(jy_408, cluster = clusters[i], pt.size = 1, clustering = 'unified_clusters', anterior = FALSE)
  })
Error in plot_clusters_vertical_spatial(jy_408, cluster = clusters[i],  : 
  could not find function "plot_clusters_vertical_spatial"
plot_clusters_vertical_spatial <- function(sobj, cluster, clustering = NULL, anterior = FALSE, cluster_color =  '#CB2A55', pt.size = 1, space = "H", arc = TRUE)
{
  cluster_identity = as.numeric(unlist(ifelse(is.null(clustering),
                                              Idents(sobj) == levels(Idents(sobj))[cluster],sobj[[clustering]]))) == (cluster)
  coordinates <- Embeddings(sobj, reduction = space)
  gene_df <- as.data.frame(cbind(coordinates, cluster_identity))
  colnames(gene_df) <- c('X', 'Y', 'clust')
  gene_df <- gene_df %>% dplyr::arrange(clust)
  plot <- ggplot(gene_df, aes(x = X, y = Y, color = factor(clust))) + geom_point(size = pt.size, alpha = 1) +  
            theme_classic() + ggtitle(cluster) + NoAxes() + NoLegend() + 
    coord_fixed(ratio = 0.5)  + theme(title = element_text(face = 'bold', size = rel(0.8), hjust = 1)) 
  cluster_color = scales::hue_pal()(nrow(unique(sobj[[clustering]])))[cluster]
  plot = plot + scale_colour_manual(values = c('grey90', cluster_color))
  intercept = ifelse(anterior, 660, 484)
  if(arc){plot = plot + geom_hline(yintercept=484, linetype = "dashed",color = cluster_color)}
  return(plot)
}
plot_clusters_vertical_spatial(jy_164, pt.size = 1, cluster = 3, clustering = 'RNA_snn_res.0.8')

plot_features_vertical_spatial_smoothed <- function(sobj, gene, pt.size = 0.5, space = "H", arc = TRUE)
{
  coordinates <- Embeddings(sobj, reduction = space)
  expmat <- as.matrix(FetchData(sobj, gene))
  gene_df <- as.data.frame(cbind(coordinates, expmat))
  colnames(gene_df) <- c('X', 'Y', 'expr')
  gene_df <- gene_df %>% dplyr::arrange(!is.na(expr), expr)
  colors = c('grey90', 'grey90', '#0f4c5c')
  gene_df$expr[gene_df$expr == 0] = NA
  plot <- gene_df %>%
    filter(!is.na(expr)) %>%
    ggplot(aes(x = X, y = Y, color = expr)) +stat_density_2d(aes(fill = ..density..), geom = "raster", n = 400,contour = FALSE, interpolate = TRUE) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
#geom_bin2d(bins = 10) + #geom_point(size = pt.size, alpha = 1)+  
            theme_classic() + ggtitle(gene) + NoAxes() + NoLegend() + 
    coord_fixed(ratio = 0.5) + scale_fill_gradient(na.value = colors[1], low = colors[2], high = colors[3], labels = NULL)  + theme(title = element_text(face = 'bold', size = rel(0.5), hjust = 1)) 
  if(arc){plot = plot + geom_hline(yintercept=660, linetype = "dashed",color = colors[3])}
  return(plot)
}
plot_features_vertical_spatial_smoothed(jy_164, gene = 'PAX6')

genes = rownames(jy_408)
plots <- lapply(1:length(genes), function(i){
    plot_features_vertical_spatial_smoothed(jy_408, genes[i], pt.size = 1)
  })
verts= plot_grid(plotlist = plots, label_size = 10, nrow = 1)
verts

ggsave(plot = verts, filename = 'test_408_smoothed-vertical_expr_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 18, height = 8, dpi = 150)

normed_data <- GetAssayData(jy_all, slot = 'data')
gad_1_true = normed_data['GAD1', ] != 0
jy_all$gad1 = gad_1_true
jy_gad = jy_all[, jy_all$gad1]


breakpoints = 1:20/10+0.3
plots = list()
jy_gad <- FindVariableFeatures(jy_gad, selection.method = "vst")
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
all.genes <- rownames(jy_gad)
jy_gad <- ScaleData(jy_gad, features = all.genes)
Centering and scaling data matrix

  |                                                                                                                                                                           
  |                                                                                                                                                                     |   0%
  |                                                                                                                                                                           
  |=====================================================================================================================================================================| 100%
jy_gad <- FindNeighbors(jy_gad, dims = 1:30)
Computing nearest neighbor graph
Computing SNN
i = 1
for (breakpoint in breakpoints){
  jy_gad <- FindClusters(jy_gad, resolution = breakpoint)
  jy_gad <- RunUMAP(jy_gad, dims = 1:30)
  jy_gad.markers <- FindAllMarkers(jy_gad, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
  labels = jy_gad.markers %>%
   group_by(cluster) %>%
   slice_max(n = 1, order_by = avg_log2FC)
  new.cluster.ids <- labels$gene
  names(new.cluster.ids) <- levels(jy_gad)
  jy_gad <- RenameIdents(jy_gad, new.cluster.ids)
  plots[[i]] = DimPlot(jy_gad, reduction = "umap", pt.size = 1, label = TRUE) + NoAxes() + NoLegend() + ggtitle(breakpoint)
  i = i + 1
}
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7572
Number of communities: 5
Elapsed time: 0 seconds
13:03:06 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:06 Read 1137 rows and found 30 numeric columns
13:03:06 Using Annoy for neighbor search, n_neighbors = 30
13:03:06 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:06 Writing NN index file to temp file /tmp/RtmpfJenoj/file767657dabb5f1
13:03:06 Searching Annoy index using 1 thread, search_k = 3000
13:03:06 Annoy recall = 100%
13:03:06 Commencing smooth kNN distance calibration using 1 thread
13:03:07 Initializing from normalized Laplacian + noise
13:03:07 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:08 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++                                               | 6 % ~00s          
  |++++++                                            | 11% ~00s          
  |+++++++++                                         | 17% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |++++++++++++++                                    | 28% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |++++++++++++++++++++                              | 39% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |+++++++++++++++++++++++++++++++                   | 61% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7338
Number of communities: 6
Elapsed time: 0 seconds
13:03:09 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:09 Read 1137 rows and found 30 numeric columns
13:03:09 Using Annoy for neighbor search, n_neighbors = 30
13:03:09 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:09 Writing NN index file to temp file /tmp/RtmpfJenoj/file76765529e9362
13:03:09 Searching Annoy index using 1 thread, search_k = 3000
13:03:09 Annoy recall = 100%
13:03:10 Commencing smooth kNN distance calibration using 1 thread
13:03:10 Initializing from normalized Laplacian + noise
13:03:10 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:12 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |+++++++                                           | 13% ~00s          
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++                          | 47% ~00s          
  |+++++++++++++++++++++++++++                       | 53% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7155
Number of communities: 7
Elapsed time: 0 seconds
13:03:12 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:12 Read 1137 rows and found 30 numeric columns
13:03:12 Using Annoy for neighbor search, n_neighbors = 30
13:03:12 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:12 Writing NN index file to temp file /tmp/RtmpfJenoj/file767656f6088aa
13:03:12 Searching Annoy index using 1 thread, search_k = 3000
13:03:13 Annoy recall = 100%
13:03:13 Commencing smooth kNN distance calibration using 1 thread
13:03:14 Initializing from normalized Laplacian + noise
13:03:14 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:15 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6971
Number of communities: 7
Elapsed time: 0 seconds
13:03:16 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:16 Read 1137 rows and found 30 numeric columns
13:03:16 Using Annoy for neighbor search, n_neighbors = 30
13:03:16 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:16 Writing NN index file to temp file /tmp/RtmpfJenoj/file76765cdbea8b
13:03:16 Searching Annoy index using 1 thread, search_k = 3000
13:03:16 Annoy recall = 100%
13:03:17 Commencing smooth kNN distance calibration using 1 thread
13:03:17 Initializing from normalized Laplacian + noise
13:03:17 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:19 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6796
Number of communities: 8
Elapsed time: 0 seconds
13:03:19 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:19 Read 1137 rows and found 30 numeric columns
13:03:19 Using Annoy for neighbor search, n_neighbors = 30
13:03:19 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:19 Writing NN index file to temp file /tmp/RtmpfJenoj/file7676569b8b375
13:03:19 Searching Annoy index using 1 thread, search_k = 3000
13:03:20 Annoy recall = 100%
13:03:20 Commencing smooth kNN distance calibration using 1 thread
13:03:21 Initializing from normalized Laplacian + noise
13:03:21 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:22 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6643
Number of communities: 9
Elapsed time: 0 seconds
13:03:23 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:23 Read 1137 rows and found 30 numeric columns
13:03:23 Using Annoy for neighbor search, n_neighbors = 30
13:03:23 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:23 Writing NN index file to temp file /tmp/RtmpfJenoj/file767657dc91999
13:03:23 Searching Annoy index using 1 thread, search_k = 3000
13:03:23 Annoy recall = 100%
13:03:24 Commencing smooth kNN distance calibration using 1 thread
13:03:24 Initializing from normalized Laplacian + noise
13:03:24 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:26 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6502
Number of communities: 9
Elapsed time: 0 seconds
13:03:26 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:26 Read 1137 rows and found 30 numeric columns
13:03:26 Using Annoy for neighbor search, n_neighbors = 30
13:03:26 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:26 Writing NN index file to temp file /tmp/RtmpfJenoj/file76765b780f30
13:03:26 Searching Annoy index using 1 thread, search_k = 3000
13:03:27 Annoy recall = 100%
13:03:27 Commencing smooth kNN distance calibration using 1 thread
13:03:28 Initializing from normalized Laplacian + noise
13:03:28 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:29 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6350
Number of communities: 10
Elapsed time: 0 seconds
13:03:30 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:30 Read 1137 rows and found 30 numeric columns
13:03:30 Using Annoy for neighbor search, n_neighbors = 30
13:03:30 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:30 Writing NN index file to temp file /tmp/RtmpfJenoj/file76765231577fc
13:03:30 Searching Annoy index using 1 thread, search_k = 3000
13:03:30 Annoy recall = 100%
13:03:31 Commencing smooth kNN distance calibration using 1 thread
13:03:32 Initializing from normalized Laplacian + noise
13:03:32 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:33 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |++++                                              | 6 % ~00s          
  |+++++++                                           | 12% ~00s          
  |++++++++++                                        | 19% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |++++++++++++++++++++++                            | 44% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 56% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6222
Number of communities: 10
Elapsed time: 0 seconds
13:03:34 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:34 Read 1137 rows and found 30 numeric columns
13:03:34 Using Annoy for neighbor search, n_neighbors = 30
13:03:34 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:34 Writing NN index file to temp file /tmp/RtmpfJenoj/file7676513ea33a3
13:03:34 Searching Annoy index using 1 thread, search_k = 3000
13:03:34 Annoy recall = 100%
13:03:34 Commencing smooth kNN distance calibration using 1 thread
13:03:35 Initializing from normalized Laplacian + noise
13:03:35 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:37 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 8 % ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++++++                              | 38% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.6108
Number of communities: 11
Elapsed time: 0 seconds
13:03:37 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:37 Read 1137 rows and found 30 numeric columns
13:03:37 Using Annoy for neighbor search, n_neighbors = 30
13:03:37 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:38 Writing NN index file to temp file /tmp/RtmpfJenoj/file76765258e0317
13:03:38 Searching Annoy index using 1 thread, search_k = 3000
13:03:38 Annoy recall = 100%
13:03:38 Commencing smooth kNN distance calibration using 1 thread
13:03:39 Initializing from normalized Laplacian + noise
13:03:39 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:40 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 8 % ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++++++                              | 38% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5994
Number of communities: 11
Elapsed time: 0 seconds
13:03:41 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:41 Read 1137 rows and found 30 numeric columns
13:03:41 Using Annoy for neighbor search, n_neighbors = 30
13:03:41 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:41 Writing NN index file to temp file /tmp/RtmpfJenoj/file767652cf034bd
13:03:41 Searching Annoy index using 1 thread, search_k = 3000
13:03:42 Annoy recall = 100%
13:03:42 Commencing smooth kNN distance calibration using 1 thread
13:03:43 Initializing from normalized Laplacian + noise
13:03:43 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:44 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 8 % ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++++++                              | 38% ~00s          
  |++++++++++++++++++++++++                          | 46% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5885
Number of communities: 12
Elapsed time: 0 seconds
13:03:45 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:45 Read 1137 rows and found 30 numeric columns
13:03:45 Using Annoy for neighbor search, n_neighbors = 30
13:03:45 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:45 Writing NN index file to temp file /tmp/RtmpfJenoj/file7676560fe697
13:03:45 Searching Annoy index using 1 thread, search_k = 3000
13:03:45 Annoy recall = 100%
13:03:46 Commencing smooth kNN distance calibration using 1 thread
13:03:46 Initializing from normalized Laplacian + noise
13:03:46 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:48 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5778
Number of communities: 12
Elapsed time: 0 seconds
13:03:49 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:49 Read 1137 rows and found 30 numeric columns
13:03:49 Using Annoy for neighbor search, n_neighbors = 30
13:03:49 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:49 Writing NN index file to temp file /tmp/RtmpfJenoj/file76765173b0aa1
13:03:49 Searching Annoy index using 1 thread, search_k = 3000
13:03:49 Annoy recall = 100%
13:03:50 Commencing smooth kNN distance calibration using 1 thread
13:03:50 Initializing from normalized Laplacian + noise
13:03:50 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:52 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5666
Number of communities: 12
Elapsed time: 0 seconds
13:03:53 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:53 Read 1137 rows and found 30 numeric columns
13:03:53 Using Annoy for neighbor search, n_neighbors = 30
13:03:53 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:53 Writing NN index file to temp file /tmp/RtmpfJenoj/file76765488c0a9
13:03:53 Searching Annoy index using 1 thread, search_k = 3000
13:03:53 Annoy recall = 100%
13:03:53 Commencing smooth kNN distance calibration using 1 thread
13:03:54 Initializing from normalized Laplacian + noise
13:03:54 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:55 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5566
Number of communities: 13
Elapsed time: 0 seconds
13:03:56 UMAP embedding parameters a = 0.9922 b = 1.112
13:03:56 Read 1137 rows and found 30 numeric columns
13:03:56 Using Annoy for neighbor search, n_neighbors = 30
13:03:56 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:57 Writing NN index file to temp file /tmp/RtmpfJenoj/file76765e0cede1
13:03:57 Searching Annoy index using 1 thread, search_k = 3000
13:03:57 Annoy recall = 100%
13:03:57 Commencing smooth kNN distance calibration using 1 thread
13:03:58 Initializing from normalized Laplacian + noise
13:03:58 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:03:59 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 12

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5465
Number of communities: 13
Elapsed time: 0 seconds
13:04:00 UMAP embedding parameters a = 0.9922 b = 1.112
13:04:00 Read 1137 rows and found 30 numeric columns
13:04:00 Using Annoy for neighbor search, n_neighbors = 30
13:04:00 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:00 Writing NN index file to temp file /tmp/RtmpfJenoj/file76765623ef3bd
13:04:00 Searching Annoy index using 1 thread, search_k = 3000
13:04:01 Annoy recall = 100%
13:04:01 Commencing smooth kNN distance calibration using 1 thread
13:04:02 Initializing from normalized Laplacian + noise
13:04:02 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:03 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |+++++++                                           | 13% ~00s          
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++                          | 47% ~00s          
  |+++++++++++++++++++++++++++                       | 53% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 12

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5364
Number of communities: 14
Elapsed time: 0 seconds
13:04:04 UMAP embedding parameters a = 0.9922 b = 1.112
13:04:04 Read 1137 rows and found 30 numeric columns
13:04:04 Using Annoy for neighbor search, n_neighbors = 30
13:04:04 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:04 Writing NN index file to temp file /tmp/RtmpfJenoj/file767657373bc63
13:04:04 Searching Annoy index using 1 thread, search_k = 3000
13:04:05 Annoy recall = 100%
13:04:05 Commencing smooth kNN distance calibration using 1 thread
13:04:06 Initializing from normalized Laplacian + noise
13:04:06 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:07 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |+++++++                                           | 13% ~00s          
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++                          | 47% ~00s          
  |+++++++++++++++++++++++++++                       | 53% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 12

  |                                                  | 0 % ~calculating  
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 13

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5275
Number of communities: 15
Elapsed time: 0 seconds
13:04:08 UMAP embedding parameters a = 0.9922 b = 1.112
13:04:08 Read 1137 rows and found 30 numeric columns
13:04:08 Using Annoy for neighbor search, n_neighbors = 30
13:04:08 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:08 Writing NN index file to temp file /tmp/RtmpfJenoj/file767655f8a538b
13:04:08 Searching Annoy index using 1 thread, search_k = 3000
13:04:08 Annoy recall = 100%
13:04:09 Commencing smooth kNN distance calibration using 1 thread
13:04:10 Initializing from normalized Laplacian + noise
13:04:10 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:11 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |++++                                              | 6 % ~00s          
  |+++++++                                           | 12% ~00s          
  |++++++++++                                        | 19% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |++++++++++++++++++++++                            | 44% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 56% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 12

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 13

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 14

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5186
Number of communities: 16
Elapsed time: 0 seconds
13:04:12 UMAP embedding parameters a = 0.9922 b = 1.112
13:04:12 Read 1137 rows and found 30 numeric columns
13:04:12 Using Annoy for neighbor search, n_neighbors = 30
13:04:12 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:12 Writing NN index file to temp file /tmp/RtmpfJenoj/file767656782cb10
13:04:12 Searching Annoy index using 1 thread, search_k = 3000
13:04:12 Annoy recall = 100%
13:04:13 Commencing smooth kNN distance calibration using 1 thread
13:04:14 Initializing from normalized Laplacian + noise
13:04:14 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:15 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |++++                                              | 6 % ~00s          
  |+++++++                                           | 12% ~00s          
  |++++++++++                                        | 19% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |++++++++++++++++++++++                            | 44% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 56% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 12

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 13

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 14

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 15

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1137
Number of edges: 39738

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.5097
Number of communities: 16
Elapsed time: 0 seconds
13:04:16 UMAP embedding parameters a = 0.9922 b = 1.112
13:04:16 Read 1137 rows and found 30 numeric columns
13:04:16 Using Annoy for neighbor search, n_neighbors = 30
13:04:16 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:16 Writing NN index file to temp file /tmp/RtmpfJenoj/file7676567fec782
13:04:16 Searching Annoy index using 1 thread, search_k = 3000
13:04:17 Annoy recall = 100%
13:04:17 Commencing smooth kNN distance calibration using 1 thread
13:04:18 Initializing from normalized Laplacian + noise
13:04:18 Commencing optimization for 500 epochs, with 43072 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
13:04:19 Optimization finished
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+++++++                                           | 12% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |++++++++                                          | 14% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |++++                                              | 6 % ~00s          
  |+++++++                                           | 12% ~00s          
  |++++++++++                                        | 19% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |++++++++++++++++++++++                            | 44% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 56% ~00s          
  |++++++++++++++++++++++++++++++++                  | 62% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~00s          
  |++++++++++++                                      | 22% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++++                           | 44% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+++++                                             | 9 % ~00s          
  |++++++++++                                        | 18% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |+++++++++++++++++++                               | 36% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 12

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 13

  |                                                  | 0 % ~calculating  
  |+++++                                             | 10% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 14

  |                                                  | 0 % ~calculating  
  |+++++                                             | 8 % ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++++++                    | 58% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Calculating cluster 15

  |                                                  | 0 % ~calculating  
  |++++++++++                                        | 20% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
marrangeGrob(plots, nrow=2, ncol=2)

ml <- marrangeGrob(plots, nrow=2, ncol=2)
ggsave(filename = 'gad1_sequential_clustering_umaps.pdf', path = file.path(output_dir_plot, '20220721_1'), ml)
Saving 7.29 x 4.5 in image

genes = rownames(jy_gad)
plots <- lapply(1:length(genes), function(i){
    plot_features_umap(jy_gad, genes[i], pt.size = 0.5)
  })
umaps = plot_grid(plotlist = plots, label_size = 10, nrow = 4)
umaps

#ggsave(plot = umaps, filename = 'test_immature_umapl_expr_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 10, height = 4, dpi = 150)
big_dimplot <- function(sobj, grep_pattern){
  dp = DimPlot(sobj, cells.highlight = list(imp = which(grepl(grep_pattern, sobj$area))))
  dp <- dp + scale_color_manual(values = c('grey90', '#1982c4'), labels=c('other', grep_pattern)) + NoAxes()
}
patterns = c('408_CC', '408_MS_CC', 'vMS_TC', 'dMS_TC', '408_TC', '164_CC', '164_MS_CC', '164_MS_TC',  '164_TC')
plots <- lapply(1:length(patterns), function(i){
    big_dimplot(jy_gad, grep_pattern = patterns[i])
  })
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
areas = plot_grid(plotlist = plots, label_size = 10, nrow = 3)
areas

ggsave(plot = areas, filename = 'test_gad_area_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 14, height = 8, dpi = 150)


plot_vertical_smoothed <- function(sobj, gene, images_ordered){
  expmat <- as.matrix(FetchData(sobj, gene))
  ## What's the logic. I need to build a rectangle, so just give it the x, y
  ## and fill is not density
  xpos = rep(0, length(images_ordered))
  ypos = 1:length(images_ordered)
  image_expr = c()
  for(i in 1:length(images_ordered)){
    image = images_ordered[i]
    gene_expr_in_subset = expmat[sobj$IMAGE.NAME == image]
    image_expr = c(image_expr, mean(gene_expr_in_subset))
  }
  tile_df = as.data.frame(cbind(xpos, ypos, image_expr)) 
  colnames(tile_df) <-  c('X', 'Y','mean_expr')
  p <- tile_df %>%
    ggplot(aes(x = X, y = Y, fill = mean_expr)) + geom_raster(interpolate = TRUE) +
    coord_fixed() + theme_classic() + NoAxes() + NoLegend() + ggtitle(gene) + theme(title = element_text(face = 'bold', size = rel(0.5), hjust = 1)) 
  return(p)
}

plot_vertical_smoothed(jy_164, 'PAX6', images_ordered)

genes_to_show = c('DCX', 'GAD1', 'DLX2', 'NKX2.1', 'PROX1', 'MAF1', 'TSHZ1', 'CXCR4', 'CXCL12', 'CALB2', 'TBR1')
genes = genes_to_show
plots <- lapply(1:length(genes), function(i){
    plot_vertical_smoothed(jy_164, genes[i], images_ordered)
  })
verts= plot_grid(plotlist = plots, label_size = 10, nrow = 1)
verts
#ggsave(plot = verts, filename = 'test_408_smoothed-vertical_expr_plots_size1_alpha1.png', path = file.path(output_dir_plot, '20220721_1'), width = 18, height = 8, dpi = 150)
rplot <- RidgePlot(jy_all, features = genes_to_show, group.by = 'area', ncol = 2)
ggsave(rplot, filename = 'rplot_by_area.png', path = file.path(output_dir_plot, '20220727_1'), width = 6, height = 15, dpi = 150)
Picking joint bandwidth of 0.283
Picking joint bandwidth of 1.05
Picking joint bandwidth of 0.896
Picking joint bandwidth of 1.14
Picking joint bandwidth of 0.774
Picking joint bandwidth of 0.472
Picking joint bandwidth of 0.845
Picking joint bandwidth of 0.918
Picking joint bandwidth of 1.02
Picking joint bandwidth of 0.973
Picking joint bandwidth of 0.955
vplot <- VlnPlot(jy_all, features = genes_to_show, group.by = 'area', ncol = 3)
vplot
ggsave(vplot, filename = 'vplot_by_area.png', path = file.path(output_dir_plot, '20220727_1'), width = 10, height = 15, dpi = 150)
vplot <- VlnPlot(jy_all, features = genes_to_show, group.by = 'area', ncol = 3)
vplot
ggsave(vplot, filename = 'vplot_by_area.png', path = file.path(output_dir_plot, '20220727_1'), width = 10, height = 15, dpi = 150)
genes_to_show = c('DCX', 'GAD1', 'CXCR4', 'DLX2', 'NKX2.1', 'PROX1', 'MAF1', 'TSHZ1', 'CXCL12', 'CALB2', 'TBR1', 'COUPTF2', 'SP8', 'SCGN')
dplot <- DotPlot(jy_all, features = genes_to_show, group.by = 'broad_areas',) + RotatedAxis() + coord_flip()
dplot

#ggsave(dplot, filename = 'dplot_by_broadarea_allgenes.png', path = file.path(output_dir_plot, '20220727_1'), width = 9, height = 3, dpi = 150)
broad_areas = c()
jy_all$broad_areas = 'wrong'
jy_all$broad_areas[grepl('408', jy_all$area) & grepl('TC', jy_all$area)] = 'pVentral'
jy_all$broad_areas[grepl('408', jy_all$area) & grepl('CC', jy_all$area)] = 'pDorsal'
jy_all$broad_areas[grepl('164', jy_all$area) & grepl('TC', jy_all$area)] = 'aVentral'
jy_all$broad_areas[grepl('164', jy_all$area) & grepl('CC', jy_all$area)] = 'aDorsal'
big_dimplot <- function(sobj, grep_pattern){
  dp = DimPlot(sobj, cells.highlight = list(imp = which(grepl(grep_pattern, sobj$broad_areas))))
  dp <- dp + scale_color_manual(values = c('grey90', '#1982c4'), labels=c('other', grep_pattern)) + NoAxes()
}
patterns = c('AntDrs', 'AntVnt', 'PosDrs', 'PosVnt')
plots <- lapply(1:length(patterns), function(i){
    big_dimplot(jy_all, grep_pattern = patterns[i])
  })
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale.
areas = plot_grid(plotlist = plots, label_size = 10, nrow = 3)
areas

ggsave(plot = areas, filename = 'umap_broad_areas.png', path = file.path(output_dir_plot, '20220727_1'), width = 10, height = 8, dpi = 150)

LS0tCnRpdGxlOiAic3RfYWxsIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpXcml0dGVuIGJ5IEF1bm95IFBvZGRhcgpKdWx5IDIxc3QsIDIwMjIKCiMgUHJvY2VzcyB0aGUgcHVuY3RhIHF1YW50aWZpZWQgcmF3IGRhdGEKYGBge3IgZXZhbD1GQUxTRX0KY3VycmVudF9maWxlIDwtIHJzdHVkaW9hcGk6OmdldEFjdGl2ZURvY3VtZW50Q29udGV4dCgpJHBhdGgKb3V0cHV0X2ZpbGUgPC0gc3RyaW5ncjo6c3RyX3JlcGxhY2UoY3VycmVudF9maWxlLCAnLlJtZCcsICcuUicpCmtuaXRyOjpwdXJsKGN1cnJlbnRfZmlsZSwgb3V0cHV0ID0gb3V0cHV0X2ZpbGUpCmZpbGUuZWRpdChvdXRwdXRfZmlsZSkKYGBgCgojIyBJbXBvcnQgcGFja2FnZXMgYW5kIGZ1bmN0aW9ucwpgYGB7cn0KbGlicmFyeShTZXVyYXQpCmxpYnJhcnkodGljdG9jKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkocGF0Y2h3b3JrKQpsaWJyYXJ5KHBoZWF0bWFwKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ3JpZEV4dHJhKQpsaWJyYXJ5KHBuZykKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KG1hZ2ljaykKbGlicmFyeShzY2FsZXMpCmBgYAoKIyMgTG9hZCB0aGUgZGF0YQpgYGB7cn0KZGF0YV9kaXIgPSAnL2hvbWUvYXVub3kvc3QvYXJjX3Byb2ZpbGluZy9zdF9hbmFseXNpcy9oYW5kX2Fubm90YXRlZF9kYXRhL3JldGhyZXNob2xkZWQnCm1ldGFfZGlyID0gJy9ob21lL2F1bm95L3N0L2FyY19wcm9maWxpbmcvc3RfYW5hbHlzaXMvaGFuZF9hbm5vdGF0ZWRfZGF0YS9vdmVybGF5JwpvdXRwdXRfZGlyX3Bsb3QgPSAnL2hvbWUvYXVub3kvc3QvYXJjX3Byb2ZpbGluZy9zdF9hbmFseXNpcy9yZXN1bHRzL3Bsb3RzJwpvdXRwdXRfZGlyX3RibHMgPSAnL2hvbWUvYXVub3kvc3QvYXJjX3Byb2ZpbGluZy9zdF9hbmFseXNpcy9yZXN1bHRzL3RhYmxlcycKYGBgCgoKIyMjIE1lcmdlIGJvdGggZGF0YXNldHMgYW5kIGdlbmVyYXRlIGEgbWV0YWRhdGEgY29sdW1uIHRoYXQgY29ycmVzcG9uZHMKIyMjIHRvIHRoZSBjZWxsICMKYGBge3J9CmRmXzQwOCA9IGRhdGEuZnJhbWUoKQpmb3IgKGZpbGVfbmFtZSBpbiBsaXN0LmZpbGVzKGRhdGFfZGlyKSl7CiAgcHJpbnQoZmlsZV9uYW1lKQogIGlmKGdyZXBsKCcxNjQnLCBmaWxlX25hbWUpKXsKICAgIG5leHQKICB9CiAgI2lmKGdyZXBsKCc0MDhfVEMnLCBmaWxlX25hbWUpIHwgZ3JlcGwoJzQwOF92TVMnLCBmaWxlX25hbWUpKXsKICAjICBuZXh0CiAgI30KICBkZl90b19hcHBlbmQgPC0gcmVhZC50YWJsZShmaWxlLnBhdGgoZGF0YV9kaXIsIGZpbGVfbmFtZSksIHNlcCA9ICcsJywgaGVhZGVyID0gVFJVRSkKICB3aGlsZShsZW5ndGgoaW5kIDwtIHdoaWNoKGRmX3RvX2FwcGVuZCRJbWFnZS5OYW1lID09ICIiKSkgPiAwKXsKICAgIGRmX3RvX2FwcGVuZCRJbWFnZS5OYW1lW2luZF0gPC0gZGZfdG9fYXBwZW5kJEltYWdlLk5hbWVbaW5kIC0xXQogIH0KICAKICBjb2xuYW1lcyhkZl90b19hcHBlbmQpIDwtIHRvdXBwZXIoY29sbmFtZXMoZGZfdG9fYXBwZW5kKSkKICBkZl90b19hcHBlbmQgPC0gZGZfdG9fYXBwZW5kICU+JQogICAgbXV0YXRlKGFyZWEgPSBzdHJzcGxpdChmaWxlX25hbWUsICcuY3N2JylbWzFdXSkKICAKICAjIyBBZGQgcmVsYXRpdmVfWFlfcG9zaXRpb24KICAKICBpZighaXNfZW1wdHkoZGZfNDA4KSl7CiAgICBkZl90b19hcHBlbmQgPC0gZGZfdG9fYXBwZW5kICU+JQogICAgICAgICAgZHBseXI6OnNlbGVjdChjb2xuYW1lcyhkZl80MDgpKQogIH0KICBkZl80MDggPC0gcmJpbmQoZGZfNDA4LCBkZl90b19hcHBlbmQpCn0KYGBgCmBgYHtyfQpkZl80MDgkSU1BR0UuTkFNRSA9IHVubGlzdChsYXBwbHkoZGZfNDA4JElNQUdFLk5BTUUsIGdzdWIsIHBhdHRlcm49J19DbHVzdGVyJywgcmVwbGFjZW1lbnQ9JycpKQpkZl80MDgkSU1BR0UuTkFNRSA9IHVubGlzdChsYXBwbHkoZGZfNDA4JElNQUdFLk5BTUUsIGdzdWIsIHBhdHRlcm49J1sqXScsIHJlcGxhY2VtZW50PScnKSkKZGZfNDA4JElNQUdFLk5BTUUgPSB1bmxpc3QobGFwcGx5KGRmXzQwOCRJTUFHRS5OQU1FLCBnc3ViLCBwYXR0ZXJuPSdYJywgcmVwbGFjZW1lbnQ9JycpKQpkZl80MDgkSU1BR0UuTkFNRSA9IHVubGlzdChsYXBwbHkoZGZfNDA4JElNQUdFLk5BTUUsIGdzdWIsIHBhdHRlcm49J0wyXycsIHJlcGxhY2VtZW50PSdMMi0nKSkKZGZfNDA4JElNQUdFLk5BTUUgPSB1bmxpc3QobGFwcGx5KGRmXzQwOCRJTUFHRS5OQU1FLCBnc3ViLCBwYXR0ZXJuPSctTDInLCByZXBsYWNlbWVudD0nX0wyJykpCmRmXzQwOCRJTUFHRS5OQU1FID0gdW5saXN0KGxhcHBseShkZl80MDgkSU1BR0UuTkFNRSwgZ3N1YiwgcGF0dGVybj0nVGNfMTInLCByZXBsYWNlbWVudD0nVENfMTInKSkKIyMgTWlzc2luZwpkZl80MDggPSBkZl80MDhbZGZfNDA4JElNQUdFLk5BTUUgIT0gJ0xheWVyMScsIF0KZGZfNDA4ID0gZGZfNDA4W2RmXzQwOCRJTUFHRS5OQU1FICE9ICdUQ18xJywgXQpkZl80MDggPSBkZl80MDhbZGZfNDA4JElNQUdFLk5BTUUgIT0gJ1RDXzE4JywgXQpkZl80MDggPSBkZl80MDhbZGZfNDA4JElNQUdFLk5BTUUgIT0gJ1RDXzE5JywgXQojZGZfNDA4JElNQUdFLk5BTUUgPSB0b3VwcGVyKGRmXzQwOCRJTUFHRS5OQU1FKQp1bmlxdWUoZGZfNDA4JElNQUdFLk5BTUUpCmBgYAoKCiMjIE9yZGVyIHRoZSBpbWFnZXMKYGBge3J9CnVuaXF1ZShkZl80MDgkSU1BR0UuTkFNRSkKaW1hZ2VzX29yZGVyZWQgPSBjKCdUQ18yMCcsICdUQ18xNycsICdUQ18xNicsICdUQ18xNScsICdUQ18xNCcsICdUQ18xMycsICdUQ18xMicsICdUQ18xMScsICdUQ18xMCcsICdUQ185JywgJ1RDXzgnLCAnVENfNycsICdUQ182JywgJ1RDXzUnLAogICAgICAgICAgICAgICAgICAgJ1RDXzQnLCAnVENfMycsICdUQ18yJywgJ0NDXzQnLCAnQ0NfNScsICdDQ182JywgJ0NDXzcnLCAnQ0NfOCcsICdDQ185JywgJ0NDXzEwJywgJ0NDXzExJywgJ0NDXzEyJywgJ0NDX0wyLTMnLCAnQ0NfTDItMicsICdDQ19MMi0xJywgJ0NDX0NvcnRpY2FsMScsICdDQ19Db3J0aWNhbDInKQpgYGAKCmBgYHtyfQp4X2hvcnogPSAxOmxlbmd0aChpbWFnZXNfb3JkZXJlZCkgKiAzNQp5X2hvcnogPSByZXAoMCwgbGVuZ3RoKGltYWdlc19vcmRlcmVkKSkKaG9yel9lbWJlZGRpbmcgPSBkYXRhLmZyYW1lKCkKZGZfNDA4JFhfaG9yeiA9IC0xCmRmXzQwOCRZX2hvcnogPSAtMQpJTUFHRV9TSVpFID0gMTAyNAojIyBUaGlzIGlzIHRoZSBzaXplIG9mIGFuIGltYWdlIGluIHRoZSBnbG9iYWwgY29vcmRpbmF0ZSBzcGFjZQpJTUFHRV9MRU4gPSAyNQoKaW1hZ2VzID0gbGlzdC5maWxlcyhtZXRhX2RpcikKZm9yKGkgaW4gMTpsZW5ndGgoaW1hZ2VzX29yZGVyZWQpKXsKICAgIGltYWdlX25hbWUgPSBpbWFnZXNfb3JkZXJlZFtpXQogICAgcHJpbnQoaW1hZ2VfbmFtZSkKICAgIHNwbGl0X25hbWVzID0gc3Ryc3BsaXQoaW1hZ2VfbmFtZSwgJ18nKQogICAgY29ydGV4ID0gdG91cHBlcihzcGxpdF9uYW1lc1tbMV1dWzFdKQogICAgbnVtYmVyID0gc3BsaXRfbmFtZXNbWzFdXVsyXQogICAgbnVtYmVyX2NzdiA9IHBhc3RlMCgnXycsIG51bWJlciwgJy5jc3YnKQogICAgZmlsZW5hbWUgPSBpbWFnZXNbZ3JlcGwoY29ydGV4LCBpbWFnZXMpICYgZ3JlcGwobnVtYmVyX2NzdiwgaW1hZ2VzKSAmIGdyZXBsKCc0MDgnLCBpbWFnZXMpXQogICAgY29vcmRpbmF0ZXMgPSByZWFkLnRhYmxlKGZpbGUucGF0aChtZXRhX2RpciwgZmlsZW5hbWUpLCBzZXAgPSAnLCcsIGhlYWRlciA9IFRSVUUpCiAgICAjIyBjaGVja2VkIGFscmVhZHkgdGhhdCBsaXN0cyBhcmUgZXF1YWwsIG1pc3NpbmcgMSwgMTgsIDE5IGZvciBub3csIGxheWVyIDEgYW5kIG90aGVycwogCiAgICAjIyBzbyB0aGlzIGlzIGEgbGl0dGxlIHRyaWNreSwgc28gbmVlZCB0byBnZXQgaXQgcmlnaHQKICAgICMjIFJlbWVtYmVyLCBpdCBpcyB0aGUgdG9wIHJpZ2h0IHRoYXQgdGhlIGNvb3JkaW5hdGUgaXMgY29taW5nIGZyb20sIGJ1dAogICAgIyMgdGhlIGJvdHRvbSByaWdodCBpcyB0aGUgbmV3IGNvb3JkaW5hdGUgc3BhY2UuCiAgICAjIyBzbyBmaXJzdCB3aGVuIHdlIGdldCB0aGUgb3JpZ2luYWwgY29vcmRpbmF0ZSBzcGFjZSwgdG8gc2V0IHRvIHJlbGF0aXZlCiAgICAjIyBvZiBib3R0b20gd291bGQgYmUgdGhlIHNhbWUgWCwgYnV0IDEwMjQgLSBZCiAgICAKICAgICMjIHB1c2ggb3V0IHRoZSBjb29yZGluYXRlcyBmb3IgYmV0dGVyIHZpc3VhbGl6YXRpb24KICAgICN4X3JlcGVsbGVkIDwtICg1MTIgLSBjb29yZGluYXRlcyRYX0Nvb3JkaW5hdGVfSW5fcGl4ZWxzKQogICAgCiAgICAKICAgIGRmXzQwOFtkZl80MDgkSU1BR0UuTkFNRSA9PSBpbWFnZV9uYW1lLCAnWF9ob3J6J10gPSAoY29vcmRpbmF0ZXMkWF9Db29yZGluYXRlX0luX3BpeGVscyAvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9TSVpFICogSU1BR0VfTEVOKSArIHlfaG9yeltpXQogICAgZGZfNDA4W2RmXzQwOCRJTUFHRS5OQU1FID09IGltYWdlX25hbWUsICdZX2hvcnonXSA9ICgoMTAyNC1jb29yZGluYXRlcyRZX0Nvb3JkaW5hdGVfSW5fcGl4ZWxzKSAvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9TSVpFICogSU1BR0VfTEVOKSArIHhfaG9yeltpXQp9CmBgYAoKIyMgV2UgaGF2ZSB0aGUgY29vcmRpbmF0ZXMgZm9yIDQwOF9UQyBhbmQgb3RoZXJzCmBgYHtyfQpyb3duYW1lcyhkZl80MDgpID0gMTpucm93KGRmXzQwOCkKanlfNDA4ID0gZGZfNDA4ICU+JQogIGRwbHlyOjpzZWxlY3QoLWMoYXJlYSwgSU1BR0UuTkFNRSwgWF9ob3J6LCBZX2hvcnopKSAlPiUKICB0KCkgJT4lCiAgQ3JlYXRlU2V1cmF0T2JqZWN0KCkKYGBgCgojIyBqdXN0IHNldCBldmVyeXRoaW5nIGZyb20gYmVsb3cgMSBpbiByYXRpbyB0byB6ZXJvCmBgYHtyfQpqeV80MDggPC0gTm9ybWFsaXplRGF0YShqeV80MDgsIHNjYWxlLmZhY3RvciA9IDFlNSkgIyMjCm5vcm1lZCA9IEdldEFzc2F5RGF0YShqeV80MDgsIHNsb3QgPSAnZGF0YScpCm5vcm1lZFtub3JtZWQgPCAzXSA9IDAKanlfNDA4IDwtIFNldEFzc2F5RGF0YShqeV80MDgsIHNsb3QgPSAnZGF0YScsIG5vcm1lZCkKYGBgCgpgYGB7cn0KanlfNDA4IDwtIEZpbmRWYXJpYWJsZUZlYXR1cmVzKGp5XzQwOCwgc2VsZWN0aW9uLm1ldGhvZCA9ICJ2c3QiKQphbGwuZ2VuZXMgPC0gcm93bmFtZXMoanlfNDA4KQpqeV80MDggPC0gU2NhbGVEYXRhKGp5XzQwOCwgZmVhdHVyZXMgPSBhbGwuZ2VuZXMpCmp5XzQwOCA8LSBSdW5QQ0EoanlfNDA4LCBhcHByb3ggPSBGQUxTRSkKanlfNDA4IDwtIEZpbmROZWlnaGJvcnMoanlfNDA4LCBkaW1zID0gMTozMCkKanlfNDA4IDwtIEZpbmRDbHVzdGVycyhqeV80MDgsIHJlc29sdXRpb24gPSAxLjUpCmp5XzQwOCA8LSBSdW5VTUFQKGp5XzQwOCwgZGltcyA9IDE6MzApCgpEaW1QbG90KGp5XzQwOCwgIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAnc2V1cmF0X2NsdXN0ZXJzJykgKyBOb0F4ZXMoKQpgYGAKCmBgYHtyfQpoY29vcmRzID0gZGZfNDA4ICU+JSBkcGx5cjo6c2VsZWN0KGMoJ1hfaG9yeicsICdZX2hvcnonKSkgJT4lIGFzLm1hdHJpeCgpCmNvbG5hbWVzKGhjb29yZHMpIDwtIGMoJ3BpeGVsXzEnLCAncGl4ZWxfMicpCgpqeV80MDhbWyJIIl1dIDwtIENyZWF0ZURpbVJlZHVjT2JqZWN0KGVtYmVkZGluZ3MgPSBoY29vcmRzLCBrZXkgPSAicGl4ZWxfIiwgYXNzYXkgPSBEZWZhdWx0QXNzYXkoanlfNDA4KSkKYGBgCgojIyMgTWVyZ2UgYm90aCBkYXRhc2V0cyBhbmQgZ2VuZXJhdGUgYSBtZXRhZGF0YSBjb2x1bW4gdGhhdCBjb3JyZXNwb25kcwojIyMgdG8gdGhlIGNlbGwgIwpgYGB7cn0KZGZfMTY0ID0gZGF0YS5mcmFtZSgpCmZvciAoZmlsZV9uYW1lIGluIGxpc3QuZmlsZXMoZGF0YV9kaXIpKXsKICBwcmludChmaWxlX25hbWUpCiAgaWYoZ3JlcGwoJzQwOCcsIGZpbGVfbmFtZSkpewogICAgbmV4dAogIH0KICAjaWYoZ3JlcGwoJzQwOF9UQycsIGZpbGVfbmFtZSkgfCBncmVwbCgnNDA4X3ZNUycsIGZpbGVfbmFtZSkpewogICMgIG5leHQKICAjfQogIGRmX3RvX2FwcGVuZCA8LSByZWFkLnRhYmxlKGZpbGUucGF0aChkYXRhX2RpciwgZmlsZV9uYW1lKSwgc2VwID0gJywnLCBoZWFkZXIgPSBUUlVFKQogIHdoaWxlKGxlbmd0aChpbmQgPC0gd2hpY2goZGZfdG9fYXBwZW5kJEltYWdlLk5hbWUgPT0gIiIpKSA+IDApewogICAgZGZfdG9fYXBwZW5kJEltYWdlLk5hbWVbaW5kXSA8LSBkZl90b19hcHBlbmQkSW1hZ2UuTmFtZVtpbmQgLTFdCiAgfQogIAogIGNvbG5hbWVzKGRmX3RvX2FwcGVuZCkgPC0gdG91cHBlcihjb2xuYW1lcyhkZl90b19hcHBlbmQpKQogIGRmX3RvX2FwcGVuZCA8LSBkZl90b19hcHBlbmQgJT4lCiAgICBtdXRhdGUoYXJlYSA9IHN0cnNwbGl0KGZpbGVfbmFtZSwgJy5jc3YnKVtbMV1dKQogIAogICMjIEFkZCByZWxhdGl2ZV9YWV9wb3NpdGlvbgogIAogIGlmKCFpc19lbXB0eShkZl8xNjQpKXsKICAgIGRmX3RvX2FwcGVuZCA8LSBkZl90b19hcHBlbmQgJT4lCiAgICAgICAgICBkcGx5cjo6c2VsZWN0KGNvbG5hbWVzKGRmXzE2NCkpCiAgfQogIGRmXzE2NCA8LSByYmluZChkZl8xNjQsIGRmX3RvX2FwcGVuZCkKfQpgYGAKYGBge3J9CmRmXzE2NCRJTUFHRS5OQU1FID0gdW5saXN0KGxhcHBseShkZl8xNjQkSU1BR0UuTkFNRSwgZ3N1YiwgcGF0dGVybj0nQ0MtJywgcmVwbGFjZW1lbnQ9J0NDXycpKQpkZl8xNjQkSU1BR0UuTkFNRSA9IHVubGlzdChsYXBwbHkoZGZfMTY0JElNQUdFLk5BTUUsIGdzdWIsIHBhdHRlcm49J1sqXScsIHJlcGxhY2VtZW50PScnKSkKZGZfMTY0JElNQUdFLk5BTUUgPSB1bmxpc3QobGFwcGx5KGRmXzE2NCRJTUFHRS5OQU1FLCBnc3ViLCBwYXR0ZXJuPSdYJywgcmVwbGFjZW1lbnQ9JycpKQpkZl8xNjQkSU1BR0UuTkFNRSA9IHVubGlzdChsYXBwbHkoZGZfMTY0JElNQUdFLk5BTUUsIGdzdWIsIHBhdHRlcm49J0wyJywgcmVwbGFjZW1lbnQ9J0NDX0wyJykpCmRmXzE2NCRJTUFHRS5OQU1FID0gdW5saXN0KGxhcHBseShkZl8xNjQkSU1BR0UuTkFNRSwgZ3N1YiwgcGF0dGVybj0nTDJfJywgcmVwbGFjZW1lbnQ9J0wyLScpKQpkZl8xNjQkSU1BR0UuTkFNRSA9IHVubGlzdChsYXBwbHkoZGZfMTY0JElNQUdFLk5BTUUsIGdzdWIsIHBhdHRlcm49Jy1MMicsIHJlcGxhY2VtZW50PSdfTDInKSkKdGNfY29ydGljYWxfbmFtZXNfYmFkID0gZGZfMTY0W2dyZXBsKCdUQycsIGRmXzE2NCRhcmVhKSAmIGdyZXBsKCdDb3J0aWNhbCcsIGRmXzE2NCRJTUFHRS5OQU1FKSwgJ0lNQUdFLk5BTUUnXQpkZl8xNjRbZ3JlcGwoJ1RDJywgZGZfMTY0JGFyZWEpICYgZ3JlcGwoJ0NvcnRpY2FsJywgZGZfMTY0JElNQUdFLk5BTUUpLCAnSU1BR0UuTkFNRSddID0gdW5saXN0KGxhcHBseSh0Y19jb3J0aWNhbF9uYW1lc19iYWQsIGdzdWIsIHBhdHRlcm49J0NvcnQnLCByZXBsYWNlbWVudD0nVENfQ29ydCcpKQpjY19jb3J0aWNhbF9uYW1lc19iYWQgPSBkZl8xNjRbZ3JlcGwoJ0NDJywgZGZfMTY0JGFyZWEpICYgZ3JlcGwoJ0NvcnRpY2FsJywgZGZfMTY0JElNQUdFLk5BTUUpLCAnSU1BR0UuTkFNRSddCmRmXzE2NFtncmVwbCgnQ0MnLCBkZl8xNjQkYXJlYSkgJiBncmVwbCgnQ29ydGljYWwnLCBkZl8xNjQkSU1BR0UuTkFNRSksICdJTUFHRS5OQU1FJ10gPSB1bmxpc3QobGFwcGx5KGNjX2NvcnRpY2FsX25hbWVzX2JhZCwgZ3N1YiwgcGF0dGVybj0nQ29ydCcsIHJlcGxhY2VtZW50PSdDQ19Db3J0JykpCiNkZl8xNjQkSU1BR0UuTkFNRSA9IHVubGlzdChsYXBwbHkoZGZfMTY0JElNQUdFLk5BTUUsIGdzdWIsIHBhdHRlcm49J1RjXzEyJywgcmVwbGFjZW1lbnQ9J1RDXzEyJykpCiMjIE1pc3NpbmcKI2RmXzE2NCA9IGRmXzE2NFtkZl8xNjQkSU1BR0UuTkFNRSAhPSAnTGF5ZXIxJywgXQojZGZfMTY0ID0gZGZfMTY0W2RmXzE2NCRJTUFHRS5OQU1FICE9ICdUQ18xJywgXQojZGZfMTY0ID0gZGZfMTY0W2RmXzE2NCRJTUFHRS5OQU1FICE9ICdUQ18xOCcsIF0KI2RmXzE2NCA9IGRmXzE2NFtkZl8xNjQkSU1BR0UuTkFNRSAhPSAnVENfMTknLCBdCiNkZl8xNjQkSU1BR0UuTkFNRSA9IHRvdXBwZXIoZGZfMTY0JElNQUdFLk5BTUUpCnVuaXF1ZShkZl8xNjQkSU1BR0UuTkFNRSkKYGBgCiMjIE5vdyB3ZSBrbm93IHRoYXQgZXZlcnl0aGluZyBpcyBlcXVhbCB0byBvbmUgYW5vdGhlciwgd2Ugc2hvdWxkIGxvYWQgdGhlIHZhcmlhYmxlCgpgYGB7cn0KaW1hZ2VfbmFtZXMgPSB1bmlxdWUoZGZfMTY0JElNQUdFLk5BTUUpCiMgUHJlc2V0IHRoZXNlIHZhcmlhYmxlcyB0byBuZWdhdGl2ZSB2YWx1ZXMgc28gSSBjYW4gZWFzaWx5IGNoZWNrIGlmIHRoZXkgd2VyZSB1cGRhdGVkIGxhdGVyCmRmXzE2NCRYID0gLTEKZGZfMTY0JFkgPSAtMQojIHNldCBzb21lIG5vcm1hbGl6YXRpb24gdmFyaWFibGVzCiMjIFRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGltYWdlIHdoZW4gdGhlIHBpeGVsIHZhbHVlcyBhcmUgdGFrZW4gZnJvbSB0b3AgbGVmdCBkb3duCklNQUdFX1NJWkUgPSAxMDI0CiMjIFRoaXMgaXMgdGhlIHNpemUgb2YgYW4gaW1hZ2UgaW4gdGhlIGdsb2JhbCBjb29yZGluYXRlIHNwYWNlCklNQUdFX0xFTiA9IDMyClRDX0lNQUdFX0hFSUdIVCA9IDQxMApUQ19JTUFHRV9XSURUSCA9IDQ0NgpDQ19JTUFHRV9IRUlHSFQ9IDQyMgpDQ19JTUFHRV9XSURUSCA9IDIxNAoKIyBMb2FkIHRoZSBkYXRhZnJhbWUgd2l0aCBnbG9iYWwgYW5kIHJlbGF0aXZlIGNvb3JkaW5hdGVzCmltZ19jb3JkcyA9IHJlYWQudGFibGUoZmlsZS5wYXRoKG1ldGFfZGlyLCAnMTY0X3BpeGVsX2Nvb3JkaW5hdGVzLmNzdicpLCBzZXAgPSAnLCcsIGhlYWRlciA9IFRSVUUpCgppbWFnZXMgPSBsaXN0LmZpbGVzKG1ldGFfZGlyKQpmb3IoaW1hZ2VfbmFtZSBpbiBpbWFnZV9uYW1lcyl7CiAgICBpZihncmVwbCgnNDA4JywgaW1hZ2VfbmFtZSkpewogICAgICBuZXh0CiAgICB9CiAgICBwcmludChpbWFnZV9uYW1lKQogICAgc3BsaXRfbmFtZXMgPSBzdHJzcGxpdChpbWFnZV9uYW1lLCAnXycpCiAgICBjb3J0ZXggPSB0b3VwcGVyKHNwbGl0X25hbWVzW1sxXV1bMV0pCiAgICBudW1iZXIgPSBzcGxpdF9uYW1lc1tbMV1dWzJdCiAgICBudW1iZXJfY3N2ID0gcGFzdGUwKCdfJywgbnVtYmVyLCAnLmNzdicpCiAgICBmaWxlbmFtZSA9IGltYWdlc1tncmVwbChjb3J0ZXgsIGltYWdlcykgJiBncmVwbChudW1iZXJfY3N2LCBpbWFnZXMpICYgZ3JlcGwoJzE2NCcsIGltYWdlcyldCiAgICBjb29yZGluYXRlcyA9IHJlYWQudGFibGUoZmlsZS5wYXRoKG1ldGFfZGlyLCBmaWxlbmFtZSksIHNlcCA9ICcsJywgaGVhZGVyID0gVFJVRSkKICAgIGlmKGltYWdlX25hbWUgPT0gIkNDX0wyLTEiKXsKICAgICAgY29vcmRpbmF0ZXMgPSBjb29yZGluYXRlc1tjKDE6MzcsIDM5Om5yb3coY29vcmRpbmF0ZXMpKSwgXQogICAgfQogICAgaWYoY29ydGV4ID09ICdDQycpeyAKICAgICAgcHJpbnQocGFzdGUoJ2NjJywgZmlsZW5hbWUsIGltYWdlX25hbWUpKQogICAgICAjIyBTbyBpZiBDQywgd2UgYWRkIHRoZSBjb29yZGluYXRlcyBmb3IgVENfMSB0byBvdmVyYWxsIGltYWdlIGNvb3JkaW5hdGVzCiAgICAgIHhfYWRqID0gaW1nX2NvcmRzW2ltZ19jb3JkcyROYW1lID09ICdUQ18xJywgJ3gnXSArIAogICAgICAgICAgICAgICAgaW1nX2NvcmRzW2ltZ19jb3JkcyROYW1lID09ICdHX0NDMV90b19UQzEnLCAneCddCiAgICAgICMjIFN0YXJ0IGZyb20gYm90dG9tLCBhZGQgdGhlIGhlaWdodCwgc3VidHJhY3QgVENfMSBoZWlnaHQsIGFuZCB0aGVuIGdsb2JhbCBDQzEgdG8gVEMxCiAgICAgIHlfYWRqID0gVENfSU1BR0VfSEVJR0hUIC0gaW1nX2NvcmRzW2ltZ19jb3JkcyROYW1lID09ICdUQ18xJywgJ3knXSArCiAgICAgICAgICAgICAgICBpbWdfY29yZHNbaW1nX2NvcmRzJE5hbWUgPT0gJ0dfQ0MxX3RvX1RDMScsICd5J10gKyBDQ19JTUFHRV9IRUlHSFQKICAgIH1lbHNlewogICAgICBwcmludChwYXN0ZSgndGMnLCBmaWxlbmFtZSwgaW1hZ2VfbmFtZSkpCiAgICAgIHhfYWRqID0gMAogICAgICB5X2FkaiA9IFRDX0lNQUdFX0hFSUdIVAogICAgfQogICAgCiAgICAjIyBTbyBkb24ndCBkbyByZXBlbGxlZCBmb3Igbm93CiAgICAjeF9yZXBlbGxlZCA8LSAoNTEyIC0gY29vcmRpbmF0ZXMkWF9Db29yZGluYXRlX0luX3BpeGVscykKICAgIAogICAgIyMgc28gdGhlIHJlc2l6ZWQgeCBkaXN0YW5jZSBpcyBmcm9tIGxlZnQsIHNvIGp1c3QgYWRkIHRvIHRoZSBib3ggbG9jYXRpb24gYW5kIGFkagogICAgZGZfMTY0W2RmXzE2NCRJTUFHRS5OQU1FID09IGltYWdlX25hbWUsICdYJ10gPSAoY29vcmRpbmF0ZXMkWF9Db29yZGluYXRlX0luX3BpeGVscyAvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9TSVpFICogSU1BR0VfTEVOKSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nX2NvcmRzW2ltZ19jb3JkcyROYW1lID09IGltYWdlX25hbWUsICd4J10gKyB4X2FkagogICAgIyMgcmVzaXplZCB5IGRpc3RhbmNlCiAgICBkZl8xNjRbZGZfMTY0JElNQUdFLk5BTUUgPT0gaW1hZ2VfbmFtZSwgJ1knXSA9IHlfYWRqIC0gaW1nX2NvcmRzW2ltZ19jb3JkcyROYW1lID09IGltYWdlX25hbWUsICd5J10gLSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvb3JkaW5hdGVzJFlfQ29vcmRpbmF0ZV9Jbl9waXhlbHMgLyBJTUFHRV9TSVpFICogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX0xFTikgIAp9CmBgYAoKCgojIyBXZSBoYXZlIHRoZSBjb29yZGluYXRlcyBmb3IgNDA4X1RDIGFuZCBvdGhlcnMKYGBge3J9CnJvd25hbWVzKGRmXzE2NCkgPSAxOm5yb3coZGZfMTY0KQpqeV8xNjQgPSBkZl8xNjQgJT4lCiAgZHBseXI6OnNlbGVjdCgtYyhhcmVhLCBJTUFHRS5OQU1FLCBYLCBZKSkgJT4lCiAgdCgpICU+JQogIENyZWF0ZVNldXJhdE9iamVjdCgpCmBgYAoKIyMganVzdCBzZXQgZXZlcnl0aGluZyBmcm9tIGJlbG93IDEgaW4gcmF0aW8gdG8gemVybwpgYGB7cn0KanlfMTY0IDwtIE5vcm1hbGl6ZURhdGEoanlfMTY0LCBzY2FsZS5mYWN0b3IgPSAxZTUpICMjIwpub3JtZWQgPSBHZXRBc3NheURhdGEoanlfMTY0LCBzbG90ID0gJ2RhdGEnKQpub3JtZWRbbm9ybWVkIDwgM10gPSAwCmp5XzE2NCA8LSBTZXRBc3NheURhdGEoanlfMTY0LCBzbG90ID0gJ2RhdGEnLCBub3JtZWQpCmBgYAoKYGBge3J9Cmp5XzE2NCA8LSBGaW5kVmFyaWFibGVGZWF0dXJlcyhqeV8xNjQsIHNlbGVjdGlvbi5tZXRob2QgPSAidnN0IikKYWxsLmdlbmVzIDwtIHJvd25hbWVzKGp5XzE2NCkKanlfMTY0IDwtIFNjYWxlRGF0YShqeV8xNjQsIGZlYXR1cmVzID0gYWxsLmdlbmVzKQpqeV8xNjQgPC0gUnVuUENBKGp5XzE2NCwgYXBwcm94ID0gRkFMU0UpCmp5XzE2NCA8LSBGaW5kTmVpZ2hib3JzKGp5XzE2NCwgZGltcyA9IDE6MzApCmp5XzE2NCA8LSBGaW5kQ2x1c3RlcnMoanlfMTY0LCByZXNvbHV0aW9uID0gMC44KQpqeV8xNjQgPC0gUnVuVU1BUChqeV8xNjQsIGRpbXMgPSAxOjMwKQoKRGltUGxvdChqeV8xNjQsICByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gJ3NldXJhdF9jbHVzdGVycycpICsgTm9BeGVzKCkKYGBgCgpgYGB7cn0KdW5pcXVlKGRmXzE2NCRJTUFHRS5OQU1FKQppbWFnZXNfb3JkZXJlZCA9IGMoJ1RDX0NvcnRpY2FsMycsICdUQ19Db3J0aWNhbDInLCAnVENfQ29ydGljYWwxJywgJ1RDXzEwJywgJ1RDXzknLCAnVENfOCcsICdUQ183JywgJ1RDXzYnLCAnVENfNScsICdUQ180JywgJ1RDXzMnLCAnVENfMicsJ1RDXzEnLCdDQ18yJywnQ0NfMycsCiAgICAgICAgICAgJ0NDXzQnLCAnQ0NfNScsICdDQ182JywgJ0NDXzcnLCAnQ0NfOCcsICdDQ185JywgJ0NDXzEwJywKICAgICAgICAgICAnQ0NfTDItMScsICdDQ19MMi0yJywgJ0NDX0wyLTMnLCAnQ0NfQ29ydGljYWwxJywgJ0NDX0NvcnRpY2FsMicpCmBgYAoKYGBge3J9CnhfaG9yeiA9IDE6bGVuZ3RoKGltYWdlc19vcmRlcmVkKSAqIDM1CnlfaG9yeiA9IHJlcCgwLCBsZW5ndGgoaW1hZ2VzX29yZGVyZWQpKQpob3J6X2VtYmVkZGluZyA9IGRhdGEuZnJhbWUoKQpkZl8xNjQkWF9ob3J6ID0gLTEKZGZfMTY0JFlfaG9yeiA9IC0xCgppbWFnZXMgPSBsaXN0LmZpbGVzKG1ldGFfZGlyKQpmb3IoaSBpbiAxOmxlbmd0aChpbWFnZXNfb3JkZXJlZCkpewogICAgaW1hZ2VfbmFtZSA9IGltYWdlc19vcmRlcmVkW2ldCiAgICBwcmludChpbWFnZV9uYW1lKQogICAgc3BsaXRfbmFtZXMgPSBzdHJzcGxpdChpbWFnZV9uYW1lLCAnXycpCiAgICBjb3J0ZXggPSB0b3VwcGVyKHNwbGl0X25hbWVzW1sxXV1bMV0pCiAgICBudW1iZXIgPSBzcGxpdF9uYW1lc1tbMV1dWzJdCiAgICBudW1iZXJfY3N2ID0gcGFzdGUwKCdfJywgbnVtYmVyLCAnLmNzdicpCiAgICBmaWxlbmFtZSA9IGltYWdlc1tncmVwbChjb3J0ZXgsIGltYWdlcykgJiBncmVwbChudW1iZXJfY3N2LCBpbWFnZXMpICYgZ3JlcGwoJzE2NCcsIGltYWdlcyldCiAgICBjb29yZGluYXRlcyA9IHJlYWQudGFibGUoZmlsZS5wYXRoKG1ldGFfZGlyLCBmaWxlbmFtZSksIHNlcCA9ICcsJywgaGVhZGVyID0gVFJVRSkKICAgIGlmKGltYWdlX25hbWUgPT0gIkNDX0wyLTEiKXsKICAgICAgY29vcmRpbmF0ZXMgPSBjb29yZGluYXRlc1tjKDE6MzcsIDM5Om5yb3coY29vcmRpbmF0ZXMpKSwgXQogICAgfQogICAgIyMgY2hlY2tlZCBhbHJlYWR5IHRoYXQgbGlzdHMgYXJlIGVxdWFsLCBtaXNzaW5nIDEsIDE4LCAxOSBmb3Igbm93LCBsYXllciAxIGFuZCBvdGhlcnMKIAogICAgIyMgc28gdGhpcyBpcyBhIGxpdHRsZSB0cmlja3ksIHNvIG5lZWQgdG8gZ2V0IGl0IHJpZ2h0CiAgICAjIyBSZW1lbWJlciwgaXQgaXMgdGhlIHRvcCByaWdodCB0aGF0IHRoZSBjb29yZGluYXRlIGlzIGNvbWluZyBmcm9tLCBidXQKICAgICMjIHRoZSBib3R0b20gcmlnaHQgaXMgdGhlIG5ldyBjb29yZGluYXRlIHNwYWNlLgogICAgIyMgc28gZmlyc3Qgd2hlbiB3ZSBnZXQgdGhlIG9yaWdpbmFsIGNvb3JkaW5hdGUgc3BhY2UsIHRvIHNldCB0byByZWxhdGl2ZQogICAgIyMgb2YgYm90dG9tIHdvdWxkIGJlIHRoZSBzYW1lIFgsIGJ1dCAxMDI0IC0gWQogICAgCiAgICAjIyBwdXNoIG91dCB0aGUgY29vcmRpbmF0ZXMgZm9yIGJldHRlciB2aXN1YWxpemF0aW9uCiAgICAjeF9yZXBlbGxlZCA8LSAoNTEyIC0gY29vcmRpbmF0ZXMkWF9Db29yZGluYXRlX0luX3BpeGVscykKICAgIAogICAgCiAgICBkZl8xNjRbZGZfMTY0JElNQUdFLk5BTUUgPT0gaW1hZ2VfbmFtZSwgJ1hfaG9yeiddID0gKGNvb3JkaW5hdGVzJFhfQ29vcmRpbmF0ZV9Jbl9waXhlbHMgLyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfU0laRSAqIElNQUdFX0xFTikgKyB5X2hvcnpbaV0KICAgIGRmXzE2NFtkZl8xNjQkSU1BR0UuTkFNRSA9PSBpbWFnZV9uYW1lLCAnWV9ob3J6J10gPSAoKDEwMjQtY29vcmRpbmF0ZXMkWV9Db29yZGluYXRlX0luX3BpeGVscykgLyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfU0laRSAqIElNQUdFX0xFTikgKyB4X2hvcnpbaV0KfQpgYGAKCmBgYHtyfQpoY29vcmRzID0gZGZfMTY0ICU+JSBkcGx5cjo6c2VsZWN0KGMoJ1hfaG9yeicsICdZX2hvcnonKSkgJT4lIGFzLm1hdHJpeCgpCmNvbG5hbWVzKGhjb29yZHMpIDwtIGMoJ3BpeGVsXzEnLCAncGl4ZWxfMicpCgpqeV8xNjRbWyJIIl1dIDwtIENyZWF0ZURpbVJlZHVjT2JqZWN0KGVtYmVkZGluZ3MgPSBoY29vcmRzLCBrZXkgPSAicGl4ZWxfIiwgYXNzYXkgPSBEZWZhdWx0QXNzYXkoanlfMTY0KSkKYGBgCgoKYGBge3J9Cmp5XzE2NDwtIFJlbmFtZUNlbGxzKGp5XzE2NCwgYyhvdXRlcignMTY0XycsIDE6bmNvbChqeV8xNjQpLCBGVU49cGFzdGUwKSkpCmp5XzE2NCRhcmVhID0gZGZfMTY0JGFyZWEKanlfNDA4PC0gUmVuYW1lQ2VsbHMoanlfNDA4LCBjKG91dGVyKCc0MDhfJywgMTpuY29sKGp5XzQwOCksIEZVTj1wYXN0ZTApKSkKanlfNDA4JGFyZWEgPSBkZl80MDgkYXJlYQpqeV9hbGwgPC0gbWVyZ2UoanlfMTY0LCBqeV80MDgpCmBgYApgYGB7cn0KanlfYWxsIDwtIE5vcm1hbGl6ZURhdGEoanlfYWxsLCBzY2FsZS5mYWN0b3IgPSAxZTUpICMjIwpub3JtZWQgPSBHZXRBc3NheURhdGEoanlfYWxsLCBzbG90ID0gJ2RhdGEnKQpub3JtZWRbbm9ybWVkIDwgM10gPSAwCmp5X2FsbCA8LSBTZXRBc3NheURhdGEoanlfYWxsLCBzbG90ID0gJ2RhdGEnLCBub3JtZWQpCmBgYAoKYGBge3J9Cmp5X2FsbCA8LSBGaW5kVmFyaWFibGVGZWF0dXJlcyhqeV9hbGwsIHNlbGVjdGlvbi5tZXRob2QgPSAidnN0IikKYWxsLmdlbmVzIDwtIHJvd25hbWVzKGp5X2FsbCkKanlfYWxsIDwtIFNjYWxlRGF0YShqeV9hbGwsIGZlYXR1cmVzID0gYWxsLmdlbmVzKQpqeV9hbGwgPC0gUnVuUENBKGp5X2FsbCwgYXBwcm94ID0gRkFMU0UpCmp5X2FsbCA8LSBGaW5kTmVpZ2hib3JzKGp5X2FsbCwgZGltcyA9IDE6MzApCmp5X2FsbCA8LSBGaW5kQ2x1c3RlcnMoanlfYWxsLCByZXNvbHV0aW9uID0gMS41KQpqeV9hbGwgPC0gUnVuVU1BUChqeV9hbGwsIGRpbXMgPSAxOjMwKQoKRGltUGxvdChqeV9hbGwsICByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gJ3NldXJhdF9jbHVzdGVycycpICsgTm9BeGVzKCkKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNH0KYmlnX2RpbXBsb3QgPC0gZnVuY3Rpb24oc29iaiwgZ3JlcF9wYXR0ZXJuKXsKICBkcCA9IERpbVBsb3Qoc29iaiwgY2VsbHMuaGlnaGxpZ2h0ID0gbGlzdChpbXAgPSB3aGljaChncmVwbChncmVwX3BhdHRlcm4sIHNvYmokYXJlYSkpKSkKICBkcCA8LSBkcCArIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCdncmV5OTAnLCAnIzE5ODJjNCcpLCBsYWJlbHM9Yygnb3RoZXInLCBncmVwX3BhdHRlcm4pKSArIE5vQXhlcygpCn0KcGF0dGVybnMgPSBjKCc0MDhfQ0MnLCAnNDA4X01TX0NDJywgJ3ZNU19UQycsICdkTVNfVEMnLCAnNDA4X1RDJywgJzE2NF9DQycsICcxNjRfTVNfQ0MnLCAnMTY0X01TX1RDJywgICcxNjRfVEMnKQpwbG90cyA8LSBsYXBwbHkoMTpsZW5ndGgocGF0dGVybnMpLCBmdW5jdGlvbihpKXsKICAgIGJpZ19kaW1wbG90KGp5X2FsbCwgZ3JlcF9wYXR0ZXJuID0gcGF0dGVybnNbaV0pCiAgfSkKYXJlYXMgPSBwbG90X2dyaWQocGxvdGxpc3QgPSBwbG90cywgbGFiZWxfc2l6ZSA9IDEwLCBucm93ID0gMykKYXJlYXMKZ2dzYXZlKHBsb3QgPSBhcmVhcywgZmlsZW5hbWUgPSAndGVzdF9hbGxfYXJlYV9wbG90c19zaXplMV9hbHBoYTEucG5nJywgcGF0aCA9IGZpbGUucGF0aChvdXRwdXRfZGlyX3Bsb3QsICcyMDIyMDcyMV8xJyksIHdpZHRoID0gMTQsIGhlaWdodCA9IDgsIGRwaSA9IDE1MCkKYGBgCmBgYHtyfQoKcGxvdF9jbHVzdGVyc191bWFwKGp5X2FsbCwgY2x1c3RlcmluZyA9J1JOQV9zbm5fcmVzLjEuNScsIHB0LnNpemUgPSAyLjApCmBgYAoKYGBge3J9Cmp5X2FsbC5tYXJrZXJzIDwtIEZpbmRBbGxNYXJrZXJzKGp5X2FsbCwgb25seS5wb3MgPSBUUlVFLCBtaW4ucGN0ID0gMC4yNSwgbG9nZmMudGhyZXNob2xkID0gMC4yNSkKanlfYWxsLm1hcmtlcnMgJT4lCiAgIGdyb3VwX2J5KGNsdXN0ZXIpICU+JQogICBzbGljZV9tYXgobiA9IDMyLCBvcmRlcl9ieSA9IGF2Z19sb2cyRkMpCmBgYAoKCmBgYHtyfQpjbHVzdGVyc18xNjQgPSBqeV9hbGwkUk5BX3Nubl9yZXMuMS41WzE6bmNvbChqeV8xNjQpXQpqeV8xNjQkdW5pZmllZF9jbHVzdGVycyA9IGNsdXN0ZXJzXzE2NApjbHVzdGVyc180MDggPSBqeV9hbGwkUk5BX3Nubl9yZXMuMS41WyhuY29sKGp5XzE2NCkrMSk6bmNvbChqeV9hbGwpXQpqeV80MDgkdW5pZmllZF9jbHVzdGVycyA9IGNsdXN0ZXJzXzQwOApgYGAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTR9CmNsdXN0ZXJzID0gYXMubnVtZXJpYyhzb3J0KHVuaXF1ZShqeV80MDgkdW5pZmllZF9jbHVzdGVycykpKQpwbG90cyA8LSBsYXBwbHkoMTpsZW5ndGgoY2x1c3RlcnMpLCBmdW5jdGlvbihpKXsKICAgIHBsb3RfY2x1c3RlcnNfdmVydGljYWxfc3BhdGlhbChqeV80MDgsIGNsdXN0ZXIgPSBjbHVzdGVyc1tpXSwgcHQuc2l6ZSA9IDEsIGNsdXN0ZXJpbmcgPSAndW5pZmllZF9jbHVzdGVycycsIGFudGVyaW9yID0gRkFMU0UpCiAgfSkKdmVydHM9IHBsb3RfZ3JpZChwbG90bGlzdCA9IHBsb3RzLCBsYWJlbF9zaXplID0gMTAsIG5yb3cgPSAxKQpnZ3NhdmUocGxvdCA9IHZlcnRzLCBmaWxlbmFtZSA9ICd0ZXN0XzQwOF91bmlmaWVkX3ZlcnRpY2FsX2NsdXN0ZXJfcGxvdHNfc2l6ZTFfYWxwaGExLnBuZycsIHBhdGggPSBmaWxlLnBhdGgob3V0cHV0X2Rpcl9wbG90LCAnMjAyMjA3MjFfMScpLCB3aWR0aCA9IDUsIGhlaWdodCA9IDgsIGRwaSA9IDE1MCkKYGBgCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTV9CmNsdXN0ZXJzID0gYXMubnVtZXJpYyhzb3J0KHVuaXF1ZShqeV8xNjQkdW5pZmllZF9jbHVzdGVycykpKQpwbG90cyA8LSBsYXBwbHkoMTpsZW5ndGgoY2x1c3RlcnMpLCBmdW5jdGlvbihpKXsKICAgIHBsb3RfY2x1c3RlcnNfdmVydGljYWxfc3BhdGlhbChqeV8xNjQsIGNsdXN0ZXIgPSBjbHVzdGVyc1tpXSwgcHQuc2l6ZSA9IDEsIGNsdXN0ZXJpbmcgPSAndW5pZmllZF9jbHVzdGVycycsIGFudGVyaW9yID0gVFJVRSkKICB9KQp2ZXJ0cz0gcGxvdF9ncmlkKHBsb3RsaXN0ID0gcGxvdHMsIGxhYmVsX3NpemUgPSAxMCwgbnJvdyA9IDEpCmdnc2F2ZShwbG90ID0gdmVydHMsIGZpbGVuYW1lID0gJ3Rlc3RfMTY0X3VuaWZpZWRfdmVydGljYWxfY2x1c3Rlcl9wbG90c19zaXplMV9hbHBoYTEucG5nJywgcGF0aCA9IGZpbGUucGF0aChvdXRwdXRfZGlyX3Bsb3QsICcyMDIyMDcyMV8xJyksIHdpZHRoID0gNSwgaGVpZ2h0ID0gOCwgZHBpID0gMTUwKQpgYGAKCmBgYHtyIGZpZy5oZWlnaHQ9MSwgZmlnLndpZHRoPTh9CmdlbmVzID0gcm93bmFtZXMobWFya2VyczIpCnBsb3RzIDwtIGxhcHBseSgxOmxlbmd0aChnZW5lcyksIGZ1bmN0aW9uKGkpewogICAgcGxvdF9mZWF0dXJlc191bWFwKGp5X2FsbCwgZ2VuZXNbaV0sIHB0LnNpemUgPSAwLjUpCiAgfSkKdW1hcHMgPSBwbG90X2dyaWQocGxvdGxpc3QgPSBwbG90cywgbGFiZWxfc2l6ZSA9IDEwLCBucm93ID0gMSkKdW1hcHMKZ2dzYXZlKHBsb3QgPSB1bWFwcywgZmlsZW5hbWUgPSAnY2x1c3RlcjdfbWFya2Vyc19hbGxfdW1hcGxfZXhwcl9wbG90c19zaXplMV9hbHBoYTEucG5nJywgcGF0aCA9IGZpbGUucGF0aChvdXRwdXRfZGlyX3Bsb3QsICcyMDIyMDcyMV8xJyksIHdpZHRoID0gOCwgaGVpZ2h0ID0gMSwgZHBpID0gMTUwKQoKYGBgCgpgYGB7cn0KanlfYWxsXzcubWFya2VycyA8LSBGaW5kTWFya2VycyhqeV9hbGwsIGlkZW50LjEgPSA3LCBpZGVudC4yID0gTlVMTCwgb25seS5wb3MgPSBGQUxTRSkKbWFya2VyczIgPSBqeV9hbGxfNy5tYXJrZXJzICU+JQogICBzbGljZV9tYXgobiA9IDUsIG9yZGVyX2J5ID0gYXZnX2xvZzJGQykKbWFya2VyczIKYGBgCmBgYHtyfQpuZXcuY2x1c3Rlci5pZHMgPSBjKCdUQlIxKy9MUlA4KyBNUyB0byBUQycsIAogICAgICAgICAgICAgICdQUk9YMSBhbmQgTktYMi4xIEltbWF0dXJlIElOcycsCidJbW1hdHVyZSBDQUxCMisgQ0dFIElOJywKICdFeGNpdGF0b3J5IENYQ0wxMisgTmV1cm9ucycsCidHU1gyLSBkTEdFIElOcycsCidNYXR1cmUsIFNTVCsgTUdFIElOcycsCiAnTWF0dXJlLCBWSVArIENHRSBJTnMnLAogJ01BRjErL1RTSFoxKyBJbW1hdHVyZSBJTnMnLAogJ0xheWVyIDIgRXhjaXRhdG9yeSBOZXVyb25zJywKICdDWENSNCsgUG9zdGVyaW9yLCBNUyB0byBUQyBJTnMnLAonRU1YMSsvTktYMi4xKyBBbnRlcmlvciwgTVMgdG8gQ0MgSU5zJywKICdFTVgxKy9MSFg2KyBQb3N0ZXJpb3IsIE1TIHRvIENDIElOcycsCiAnR1NYMisvUkVMTisvUEFYNisgZExHRSBJTnMnKQoKYGBgCgpgYGB7cn0KbmFtZXMobmV3LmNsdXN0ZXIuaWRzKSA8LSBsZXZlbHMoanlfYWxsKQpqeV9hbGwgPC0gUmVuYW1lSWRlbnRzKGp5X2FsbCwgbmV3LmNsdXN0ZXIuaWRzKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGdncmVwZWwpCnBsb3RfY2x1c3RlcnNfdW1hcCA8LSBmdW5jdGlvbihzb2JqLCBjbHVzdGVyaW5nLCBwdC5zaXplID0gMywgc3BhY2UgPSAidW1hcCIpCnsKICBjb29yZGluYXRlcyA8LSBFbWJlZGRpbmdzKHNvYmosIHJlZHVjdGlvbiA9IHNwYWNlKQogICNleHBtYXQgPC0gc29ialtbY2x1c3RlcmluZ11dCiAgZXhwbWF0ICA9IGFzLmNoYXJhY3RlcihJZGVudHMoanlfYWxsKSkKICBnZW5lX2RmIDwtIGFzLmRhdGEuZnJhbWUoY2JpbmQoY29vcmRpbmF0ZXMsIGV4cG1hdCkpCiAgY29sbmFtZXMoZ2VuZV9kZikgPC0gYygnWCcsICdZJywgJ2V4cHInKQogIGdlbmVfZGYkWCA9IGFzLm51bWVyaWMoZ2VuZV9kZiRYKQogIGdlbmVfZGYkWSA9IGFzLm51bWVyaWMoZ2VuZV9kZiRZKQogIHN1bW1hcnlfZ2VuZV9kZiA9IGdlbmVfZGYgJT4lIGRwbHlyOjpncm91cF9ieShleHByKSAlPiUgZHBseXI6OnN1bW1hcmlzZSh4bWVhbiA9IG1lYW4oWCksIHltZWFuID0gbWVhbihZKSkKICBwbG90IDwtIGdncGxvdChnZW5lX2RmLCBhZXMoeCA9IFgsIHkgPSBZLCBjb2xvciA9IGFzLmZhY3RvcihleHByKSkpICsgZ2VvbV9wb2ludChzaXplID0gcHQuc2l6ZSwgYWxwaGEgPSAwLjgpICsgIysgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3VtbWFyeV9nZW5lX2RmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXBwaW5nID0gYWVzKHggPSB4bWVhbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICN5ID0geW1lYW4pLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xhYmVsID0gc3VtbWFyeV9nZW5lX2RmJGV4cHIpICsKICAgICAgICAgICAgdGhlbWVfY2xhc3NpYygpICsgZ2d0aXRsZShjbHVzdGVyaW5nKSArIE5vQXhlcygpICsgI05vTGVnZW5kKCkgICsgCiAgICB0aGVtZSh0aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gJ2JvbGQnLCBzaXplID0gcmVsKDEpLCBoanVzdCA9IDEpKSAKICBjbHVzdGVyX2NvbG9ycyA9IHNjYWxlczo6aHVlX3BhbCgpKGxlbmd0aCh1bmlxdWUoZXhwbWF0KSkpCiAgcGxvdCA9IHBsb3QgKyBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGNsdXN0ZXJfY29sb3JzKQogIHJldHVybihwbG90KQp9CgpwbG90X2NsdXN0ZXJzX3VtYXAoanlfYWxsLCBjbHVzdGVyaW5nID0gJycsIHB0LnNpemUgPSAyLjApCmBgYAoKYGBge3IgZmlnLmhlaWdodD0zLCBmaWcud2lkdGg9OH0KaW1tYXR1cmVfSU5fbmFtZXMgPSBjKCdQUk9YMSBhbmQgTktYMi4xIEltbWF0dXJlIElOcycsCidJbW1hdHVyZSBDQUxCMisgQ0dFIGludGVybmV1cm9uJywKICdNQUYxKy9UU0haMSsgSW1tYXR1cmUgSU5zJywKICdDWENSNCsgUG9zdGVyaW9yLCBNUyB0byBUQyBJTnMnLAonRU1YMSsvTktYMi4xKyBBbnRlcmlvciwgTVMgdG8gQ0MgSU5zJywKICdFTVgxKy9MSFg2KyBQb3N0ZXJpb3IsIE1TIHRvIENDIElOcycsCiAnR1NYMisvUkVMTisvUEFYNisgQ2x1bXAnKQoKanlfaW1tYXR1cmUgPC0ganlfYWxsWywgSWRlbnRzKGp5X2FsbCkgJWluJSBpbW1hdHVyZV9JTl9uYW1lc10KYGBgCgpgYGB7cn0KanlfaW1tYXR1cmUgPC0gRmluZFZhcmlhYmxlRmVhdHVyZXMoanlfaW1tYXR1cmUsIHNlbGVjdGlvbi5tZXRob2QgPSAidnN0IikKYWxsLmdlbmVzIDwtIHJvd25hbWVzKGp5X2ltbWF0dXJlKQpqeV9pbW1hdHVyZSA8LSBTY2FsZURhdGEoanlfaW1tYXR1cmUsIGZlYXR1cmVzID0gYWxsLmdlbmVzKQpqeV9pbW1hdHVyZSA8LSBSdW5QQ0EoanlfaW1tYXR1cmUsIGFwcHJveCA9IEZBTFNFKQpqeV9pbW1hdHVyZSA8LSBGaW5kTmVpZ2hib3JzKGp5X2ltbWF0dXJlLCBkaW1zID0gMTozMCkKanlfaW1tYXR1cmUgPC0gRmluZENsdXN0ZXJzKGp5X2ltbWF0dXJlLCByZXNvbHV0aW9uID0gMS41KQpqeV9pbW1hdHVyZSA8LSBSdW5VTUFQKGp5X2ltbWF0dXJlLCBkaW1zID0gMTozMCkKCkRpbVBsb3QoanlfaW1tYXR1cmUsICByZWR1Y3Rpb24gPSAidW1hcCIsIHNwbGl0LmJ5ID0gJ2FyZWEnKSArIE5vQXhlcygpCmBgYApgYGB7cn0KYnJlYWtwb2ludHMgPSAxOjIwLzEwKzAuMwpwbG90cyA9IGxpc3QoKQpqeV9pbW1hdHVyZSA8LSBGaW5kTmVpZ2hib3JzKGp5X2ltbWF0dXJlLCBkaW1zID0gMTozMCkKaSA9IDEKZm9yIChicmVha3BvaW50IGluIGJyZWFrcG9pbnRzKXsKICBqeV9pbW1hdHVyZSA8LSBGaW5kQ2x1c3RlcnMoanlfaW1tYXR1cmUsIHJlc29sdXRpb24gPSBicmVha3BvaW50KQogIGp5X2ltbWF0dXJlIDwtIFJ1blVNQVAoanlfaW1tYXR1cmUsIGRpbXMgPSAxOjMwKQogIGp5X2ltbWF0dXJlLm1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMoanlfaW1tYXR1cmUsIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIGxvZ2ZjLnRocmVzaG9sZCA9IDAuMjUpCiAgbGFiZWxzID0ganlfaW1tYXR1cmUubWFya2VycyAlPiUKICAgZ3JvdXBfYnkoY2x1c3RlcikgJT4lCiAgIHNsaWNlX21heChuID0gMSwgb3JkZXJfYnkgPSBhdmdfbG9nMkZDKQogIG5ldy5jbHVzdGVyLmlkcyA8LSBsYWJlbHMkZ2VuZQogIG5hbWVzKG5ldy5jbHVzdGVyLmlkcykgPC0gbGV2ZWxzKGp5X2ltbWF0dXJlKQogIGp5X2ltbWF0dXJlIDwtIFJlbmFtZUlkZW50cyhqeV9pbW1hdHVyZSwgbmV3LmNsdXN0ZXIuaWRzKQogIHBsb3RzW1tpXV0gPSBEaW1QbG90KGp5X2ltbWF0dXJlLCByZWR1Y3Rpb24gPSAidW1hcCIsIHB0LnNpemUgPSAxLCBsYWJlbCA9IFRSVUUpICsgTm9BeGVzKCkgKyBOb0xlZ2VuZCgpICsgZ2d0aXRsZShicmVha3BvaW50KQogIGkgPSBpICsgMQp9CgptYXJyYW5nZUdyb2IocGxvdHMsIG5yb3c9MiwgbmNvbD0yKQptbCA8LSBtYXJyYW5nZUdyb2IocGxvdHMsIG5yb3c9MiwgbmNvbD0yKQpnZ3NhdmUoZmlsZW5hbWUgPSAnaW1tYXR1cmVfc2VxdWVudGlhbF9jbHVzdGVyaW5nX3VtYXBzLnBkZicsIHBhdGggPSBmaWxlLnBhdGgob3V0cHV0X2Rpcl9wbG90LCAnMjAyMjA3MjFfMScpLCBtbCkKYGBgCiMgbWFrZSBhbiBlYXN5IG1hcHBpbmcKYGBge3J9CmdldF9icm9hZF90eXBlIDwtIGZ1bmN0aW9uKGNlbGx0eXBlKXsKICBFeGNpdGF0b3J5ID0gIGMoJ0xheWVyIDIgRXhjaXRhdG9yeSBOZXVyb25zJywKICAgICAgICAgICAgICAgICAgJ0V4Y2l0YXRvcnkgQ1hDTDEyKyBOZXVyb25zJywKICAgICAgICAgICAgICAgICAgJ0NhamFsIFJldHppdXMgQ2VsbHMnLAogICAgICAgICAgICAgICAgICAnSW1tYXR1cmUgQ0FMQjIrIENHRSBpbnRlcm5ldXJvbicpCiAgTWF0dXJlX2luaGliID0gYygnTWF0dXJlLCBTU1QrIE1HRSBJTnMnLAogICAgICAgICAgICAgICAgICAgIk1hdHVyZSwgVklQKyBDR0UgSU5zIikKICBvdGhlciA9IGMoJ1RCUjErL0xSUDgrIE1TIHRvIFRDJykKICAgIAogIGltbWF0dXJlX25ldXJvbnMgPSBjKAogICdQUk9YMSBhbmQgTktYMi4xIEltbWF0dXJlIElOcycsCiAnTUFGMSsvVFNIWjErIEltbWF0dXJlIElOcycsCiAnQ1hDUjQrIFBvc3RlcmlvciwgTVMgdG8gVEMgSU5zJywKJ0VNWDErL05LWDIuMSsgQW50ZXJpb3IsIE1TIHRvIENDIElOcycsCiAnRU1YMSsvTEhYNisgUG9zdGVyaW9yLCBNUyB0byBDQyBJTnMnLAogJ0dTWDIrL1JFTE4rL1BBWDYrIENsdW1wJykKICBpZihjZWxsdHlwZSAlaW4lIEV4Y2l0YXRvcnkpewogICAgcmV0dXJuKCJFTiIpCiAgfWVsc2UgaWYoY2VsbHR5cGUgJWluJSBNYXR1cmVfaW5oaWIpewogICAgcmV0dXJuKCdNYXR1cmUgSU4nKQogIH0gZWxzZSBpZihjZWxsdHlwZSAlaW4lIGltbWF0dXJlX25ldXJvbnMpewogICAgcmV0dXJuKCdJbW1hdHVyZSBJTicpCiAgfSBlbHNle3JldHVybignb3RoZXInKX0gCn0KYGBgCgojIyBkbyBoZWF0bWFwIHJlYWwgcXVpY2sKYGBge3IgZmlnLmhlaWdodD0xNCwgZmlnLndpZHRoPTEwfQojIGdldCB0aGUgc2NhbGVkIGRhdGEKc2NhbGVkX3ZhbHVlcyA9IGFzLm1hdHJpeChHZXRBc3NheURhdGEoanlfYWxsLCBzbG90ID0gImRhdGEiKSkKCmdlbmVzX3RvX3JlbW92ZSA9IGMoJ0RDWCcsICdEQ0RDMicsICdLSUEwMzE5JywgJ05DQU0xJykKCiNjbHVzdGVyX29yZGVyaW5nID0gc29ydChhcy5jaGFyYWN0ZXIoSWRlbnRzKGp5X2FsbCkpLCBpbmRleC5yZXR1cm4gPSBUUlVFKQpzY2FsZWRfdmFsdWVzID0gc2NhbGVkX3ZhbHVlc1shcm93bmFtZXMoc2NhbGVkX3ZhbHVlcyklaW4lIGdlbmVzX3RvX3JlbW92ZSxdCgojIyMgQXBwbHkgc2VwYXJhdGUgY2x1c3RlcmluZywgbmVlZCB0byBsb29rIGludG8gd2h5IApociA8LSBoY2x1c3QoYXMuZGlzdCgxLWNvcih0KHNjYWxlZF92YWx1ZXMpLCBtZXRob2Q9InBlYXJzb24iKSksIG1ldGhvZCA9ICJjb21wbGV0ZSIpCiNoYyA8LSBoY2x1c3QoYXMuZGlzdCgxLWNvcihzY2FsZWRfdmFsdWVzLCBtZXRob2Q9InNwZWFybWFuIikpLCBtZXRob2Q9ImNvbXBsZXRlIikKCmJyb2FkX2xhYmVscyA9IHVubGlzdChsYXBwbHkoMTpuY29sKHNjYWxlZF92YWx1ZXMpLCBmdW5jdGlvbihpKXsKICBnZXRfYnJvYWRfdHlwZShhcy5jaGFyYWN0ZXIoSWRlbnRzKGp5X2FsbCkpW2ldKQp9KSkKI2Jyb2FkX29yZGVyID0gc29ydChicm9hZF9sYWJlbHMsIGluZGV4LnJldHVybiA9IFRSVUUpCiNmaW5hbF9veCA9IG9yZGVyKCBjbHVzdGVyX29yZGVyaW5nJHgsIGJyb2FkX29yZGVyJHgpCiNmaW5hbF9veCA9IGJyb2FkX29yZGVyJGl4CgojZ2FwcyA9IGMoKQojZm9yKGkgaW4gMjpsZW5ndGgoYnJvYWRfb3JkZXIkeCkpewojICBpZihicm9hZF9vcmRlciR4W2ldICE9IGJyb2FkX29yZGVyJHhbaS0xXSl7CiMgICAgZ2FwcyA9IGMoZ2FwcywgaSkKIyAgICBwcmludChpKQojICB9CiN9Cgpicm9hZF9hcmVhX3NvcnRlZCA9IHNvcnQoanlfYWxsJGFyZWEsIGluZGV4LnJldHVybiA9IFRSVUUpCmZpbmFsX294ID0gYnJvYWRfYXJlYV9zb3J0ZWQkaXgKCmdhcHMgPSBjKCkKZm9yKGkgaW4gMjpsZW5ndGgoYnJvYWRfYXJlYV9zb3J0ZWQkeCkpewogIGlmKGJyb2FkX2FyZWFfc29ydGVkJHhbaV0gIT0gYnJvYWRfYXJlYV9zb3J0ZWQkeFtpLTFdKXsKICAgIGdhcHMgPSBjKGdhcHMsIGkpCiAgICBwcmludChpKQogIH0KfQoKIyMjIE5vdyBhcnJhbmdlIGV2ZXJ5dGhpbmcKCmFubm90YXRpb24gPC0gZGF0YS5mcmFtZShjZWxsX3R5cGUgPSBhcy5jaGFyYWN0ZXIoSWRlbnRzKGp5X2FsbCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgI2NlbGxfY2xhc3MgPSBicm9hZF9sYWJlbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhID0ganlfYWxsJGFyZWEpCnJvd25hbWVzKGFubm90YXRpb24pIDwtIGNvbG5hbWVzKHNjYWxlZF92YWx1ZXMpICMgY2hlY2sgb3V0IHRoZSByb3cgbmFtZXMgb2YgYW5ub3RhdGlvbgoKc2NhbGVkX3ZhbHVlc1ssIGZpbmFsX294XSAlPiUKICBwaGVhdG1hcChhbm5vdGF0aW9uX2NvbCA9IGFubm90YXRpb24sIAogICAgICAgICAgIGNvbG9yID0gY29sb3JSYW1wUGFsZXR0ZShicmV3ZXIucGFsKG4gPSA5LCBuYW1lID0gIlB1cnBsZXMiKSkoMTAwKSwKICAjYnJlYWtzID0gc2VxKGZyb209IC01LCB0byA9IDUsIGJ5ID0gMTEvMTAwLiksIAogIGNsdXN0ZXJfcm93cyA9IGhyLCAjY2x1c3Rlcl9jb2xzID0gaGMsIAogICNjbHVzdGVyX3Jvd3MgPSBUUlVFLAogIGNsdXN0ZXJfY29scyA9IEZBTFNFLAogICNjbHVzdGVyaW5nX2Rpc3RhbmNlX3Jvd3MgPSAiY29ycmVsYXRpb24iLCAKICAjY2x1c3RlcmluZ19kaXN0YW5jZV9jb2xzID0gImNvcnJlbGF0aW9uIiwKICBmb250c2l6ZV9yb3cgPSA4LCBmb250c2l6ZV9jb2wgPSA0LCBzaG93X2NvbG5hbWVzID0gRkFMU0UsIGdhcHNfY29sID0gZ2FwcywKICAgICAgICAgICBzaG93X3Jvd25hbWVzID0gVFJVRSwgY2VsbF93aWR0aCA9IDEwLCBjZWxsaGVpZ2h0ID0gOCwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gMTQpIywKICAgICAgICAgICMgIGZpbGVuYW1lID0gZmlsZS5wYXRoKGZpbGUucGF0aChvdXRwdXRfZGlyX3Bsb3QsICcyMDIyMDcyMV8xJyksICduY29sXzIwX3NvcnRfYnlfYnJvYWRfdHlwZV9nYXBzLnBuZycpKQpgYGAKCmBgYHtyfQpwbG90X2ZlYXR1cmVzX3VtYXAgPC0gZnVuY3Rpb24oc29iaiwgZ2VuZSwgcHQuc2l6ZSA9IDMsIGFscGhhID0gMC44LCBzcGFjZSA9ICJ1bWFwIiwgY29sb3IgPSAnI0NCMkE1NScsIGZsaXBwZWQgPSBGQUxTRSkKewogIGNvb3JkaW5hdGVzIDwtIEVtYmVkZGluZ3Moc29iaiwgcmVkdWN0aW9uID0gc3BhY2UpCiAgZXhwbWF0IDwtIGFzLm1hdHJpeChGZXRjaERhdGEoc29iaiwgZ2VuZSkpCiAgZ2VuZV9kZiA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKGNvb3JkaW5hdGVzLCBleHBtYXQpKQogIGNvbG5hbWVzKGdlbmVfZGYpIDwtIGMoJ1gnLCAnWScsICdleHByJykKICBnZW5lX2RmIDwtIGdlbmVfZGYgJT4lIGRwbHlyOjphcnJhbmdlKCFpcy5uYShleHByKSwgZXhwcikKICBjb2xvcnMgPSBjKCdncmV5OTAnLCAnZ3JleTkwJywgY29sb3IpCiAgZ2VuZV9kZiRleHByW2dlbmVfZGYkZXhwciA9PSAwXSA9IE5BCiAgcGxvdCA8LSBnZ3Bsb3QoZ2VuZV9kZiwgYWVzKHggPSBYLCB5ID0gWSwgY29sb3IgPSBleHByKSkgKyBnZW9tX3BvaW50KHNpemUgPSBwdC5zaXplLCBhbHBoYSA9IGFscGhhKSsgIAogICAgICAgICAgICB0aGVtZV9jbGFzc2ljKCkgKyBnZ3RpdGxlKGdlbmUpICsgIHNjYWxlX2NvbG9yX2dyYWRpZW50KG5hLnZhbHVlID0gY29sb3JzWzFdLCBsb3cgPSBjb2xvcnNbMl0sIGhpZ2ggPSBjb2xvcnNbM10sIGxhYmVscyA9IE5VTEwpICArIHRoZW1lKHRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAnYm9sZCcsIHNpemUgPSByZWwoMSksIGhqdXN0ID0gMSkpIAogIGlmKGZsaXBwZWQpewogICAgcGxvdCA8LSBwbG90ICsgc2NhbGVfeF9yZXZlcnNlKCkgKyBzY2FsZV95X3JldmVyc2UoKQogIH0KICByZXR1cm4ocGxvdCArIE5vQXhlcygpICsgTm9MZWdlbmQoKSkKfQpgYGAKCgpgYGB7ciBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD0xMH0KZ2VuZXMgPSByb3duYW1lcyhqeV9pbW1hdHVyZSkKcGxvdHMgPC0gbGFwcGx5KDE6bGVuZ3RoKGdlbmVzKSwgZnVuY3Rpb24oaSl7CiAgICBwbG90X2ZlYXR1cmVzX3VtYXAoanlfaW1tYXR1cmUsIGdlbmVzW2ldLCBwdC5zaXplID0gMC41KQogIH0pCnVtYXBzID0gcGxvdF9ncmlkKHBsb3RsaXN0ID0gcGxvdHMsIGxhYmVsX3NpemUgPSAxMCwgbnJvdyA9IDQpCnVtYXBzCiNnZ3NhdmUocGxvdCA9IHVtYXBzLCBmaWxlbmFtZSA9ICd0ZXN0X2ltbWF0dXJlX3VtYXBsX2V4cHJfcGxvdHNfc2l6ZTFfYWxwaGExLnBuZycsIHBhdGggPSBmaWxlLnBhdGgob3V0cHV0X2Rpcl9wbG90LCAnMjAyMjA3MjFfMScpLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA0LCBkcGkgPSAxNTApCgpgYGAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE0fQpiaWdfZGltcGxvdCA8LSBmdW5jdGlvbihzb2JqLCBncmVwX3BhdHRlcm4pewogIGRwID0gRGltUGxvdChzb2JqLCBjZWxscy5oaWdobGlnaHQgPSBsaXN0KGltcCA9IHdoaWNoKGdyZXBsKGdyZXBfcGF0dGVybiwgc29iaiRhcmVhKSkpKQogIGRwIDwtIGRwICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoJ2dyZXk5MCcsICcjMTk4MmM0JyksIGxhYmVscz1jKCdvdGhlcicsIGdyZXBfcGF0dGVybikpICsgTm9BeGVzKCkKfQpwYXR0ZXJucyA9IGMoJzQwOF9DQycsICc0MDhfTVNfQ0MnLCAndk1TX1RDJywgJ2RNU19UQycsICc0MDhfVEMnLCAnMTY0X0NDJywgJzE2NF9NU19DQycsICcxNjRfTVNfVEMnLCAgJzE2NF9UQycpCnBsb3RzIDwtIGxhcHBseSgxOmxlbmd0aChwYXR0ZXJucyksIGZ1bmN0aW9uKGkpewogICAgYmlnX2RpbXBsb3QoanlfaW1tYXR1cmUsIGdyZXBfcGF0dGVybiA9IHBhdHRlcm5zW2ldKQogIH0pCmFyZWFzID0gcGxvdF9ncmlkKHBsb3RsaXN0ID0gcGxvdHMsIGxhYmVsX3NpemUgPSAxMCwgbnJvdyA9IDMpCmFyZWFzCmdnc2F2ZShwbG90ID0gYXJlYXMsIGZpbGVuYW1lID0gJ3Rlc3RfaW1tYXR1cmVfYXJlYV9wbG90c19zaXplMV9hbHBoYTEucG5nJywgcGF0aCA9IGZpbGUucGF0aChvdXRwdXRfZGlyX3Bsb3QsICcyMDIyMDcyMV8xJyksIHdpZHRoID0gMTQsIGhlaWdodCA9IDgsIGRwaSA9IDE1MCkKYGBgCmBgYHtyfQpqeV9pbW1hdHVyZSRzZXVyYXRfY2x1c3RlcnMgPSBqeV9pbW1hdHVyZSRSTkFfc25uX3Jlcy4xLjEKSWRlbnRzKGp5X2ltbWF0dXJlKSA9IGp5X2ltbWF0dXJlJHNldXJhdF9jbHVzdGVycwoKRGltUGxvdChqeV9pbW1hdHVyZSkKYGBgCmBgYHtyIGZpZy5oZWlnaHQ9MSwgZmlnLndpZHRoPTR9CmdlbmVzID0gcm93bmFtZXMobWFya2VyczIpCnBsb3RzIDwtIGxhcHBseSgxOmxlbmd0aChnZW5lcyksIGZ1bmN0aW9uKGkpewogICAgcGxvdF9mZWF0dXJlc191bWFwKGp5X2ltbWF0dXJlLCBnZW5lc1tpXSwgcHQuc2l6ZSA9IDAuNSkKICB9KQp1bWFwcyA9IHBsb3RfZ3JpZChwbG90bGlzdCA9IHBsb3RzLCBsYWJlbF9zaXplID0gMTAsIG5yb3cgPSAxKQp1bWFwcwpnZ3NhdmUocGxvdCA9IHVtYXBzLCBmaWxlbmFtZSA9ICdjbHVzdGVyNF9tYXJrZXJzX2ltbWF0dXJlX3VtYXBsX2V4cHJfcGxvdHNfc2l6ZTFfYWxwaGExLnBuZycsIHBhdGggPSBmaWxlLnBhdGgob3V0cHV0X2Rpcl9wbG90LCAnMjAyMjA3MjFfMScpLCB3aWR0aCA9IDQsIGhlaWdodCA9IDEsIGRwaSA9IDE1MCkKCmBgYAoKYGBge3J9Cmp5X2ltbWF0dXJlLm1hcmtlcnMgPC0gRmluZE1hcmtlcnMoanlfaW1tYXR1cmUsIGlkZW50LjEgPSAzLCBpZGVudC4yID0gNCwgb25seS5wb3MgPSBGQUxTRSkKbWFya2VyczIgPSBqeV9pbW1hdHVyZS5tYXJrZXJzICU+JQogICBzbGljZV9tYXgobiA9IDgsIG9yZGVyX2J5ID0gYXZnX2xvZzJGQykKbWFya2VyczIKYGBgCmBgYHtyfQoKRGltUGxvdChqeV9pbW1hdHVyZSwgY2VsbHMuaGlnaGxpZ2h0ID0gbGlzdChjbHUzID0gd2hpY2goSWRlbnRzKGp5X2ltbWF0dXJlKSA9PSA2KSkpICsgTm9BeGVzKCkgKyBOb0xlZ2VuZCgpCmBgYApgYGB7cn0KY2x1c3RlcnMgPSBhcy5udW1lcmljKHNvcnQodW5pcXVlKGp5XzQwOCR1bmlmaWVkX2NsdXN0ZXJzKSkpCnBsb3RzIDwtIGxhcHBseSgxOmxlbmd0aChjbHVzdGVycyksIGZ1bmN0aW9uKGkpewogICAgcGxvdF9jbHVzdGVyc192ZXJ0aWNhbF9zcGF0aWFsKGp5XzQwOCwgY2x1c3RlciA9IGNsdXN0ZXJzW2ldLCBwdC5zaXplID0gMSwgY2x1c3RlcmluZyA9ICd1bmlmaWVkX2NsdXN0ZXJzJywgYW50ZXJpb3IgPSBGQUxTRSkKICB9KQp2ZXJ0cz0gcGxvdF9ncmlkKHBsb3RsaXN0ID0gcGxvdHMsIGxhYmVsX3NpemUgPSAxMCwgbnJvdyA9IDEpCmBgYAoKYGBge3J9CnBsb3RfY2x1c3RlcnNfdmVydGljYWxfc3BhdGlhbCA8LSBmdW5jdGlvbihzb2JqLCBjbHVzdGVyLCBjbHVzdGVyaW5nID0gTlVMTCwgYW50ZXJpb3IgPSBGQUxTRSwgY2x1c3Rlcl9jb2xvciA9ICAnI0NCMkE1NScsIHB0LnNpemUgPSAxLCBzcGFjZSA9ICJIIiwgYXJjID0gVFJVRSkKewogIGNsdXN0ZXJfaWRlbnRpdHkgPSBhcy5udW1lcmljKHVubGlzdChpZmVsc2UoaXMubnVsbChjbHVzdGVyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkZW50cyhzb2JqKSA9PSBsZXZlbHMoSWRlbnRzKHNvYmopKVtjbHVzdGVyXSxzb2JqW1tjbHVzdGVyaW5nXV0pKSkgPT0gKGNsdXN0ZXIpCiAgY29vcmRpbmF0ZXMgPC0gRW1iZWRkaW5ncyhzb2JqLCByZWR1Y3Rpb24gPSBzcGFjZSkKICBnZW5lX2RmIDwtIGFzLmRhdGEuZnJhbWUoY2JpbmQoY29vcmRpbmF0ZXMsIGNsdXN0ZXJfaWRlbnRpdHkpKQogIGNvbG5hbWVzKGdlbmVfZGYpIDwtIGMoJ1gnLCAnWScsICdjbHVzdCcpCiAgZ2VuZV9kZiA8LSBnZW5lX2RmICU+JSBkcGx5cjo6YXJyYW5nZShjbHVzdCkKICBwbG90IDwtIGdncGxvdChnZW5lX2RmLCBhZXMoeCA9IFgsIHkgPSBZLCBjb2xvciA9IGZhY3RvcihjbHVzdCkpKSArIGdlb21fcG9pbnQoc2l6ZSA9IHB0LnNpemUsIGFscGhhID0gMSkgKyAgCiAgICAgICAgICAgIHRoZW1lX2NsYXNzaWMoKSArIGdndGl0bGUoY2x1c3RlcikgKyBOb0F4ZXMoKSArIE5vTGVnZW5kKCkgKyAKICAgIGNvb3JkX2ZpeGVkKHJhdGlvID0gMC41KSAgKyB0aGVtZSh0aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gJ2JvbGQnLCBzaXplID0gcmVsKDAuOCksIGhqdXN0ID0gMSkpIAogIGNsdXN0ZXJfY29sb3IgPSBzY2FsZXM6Omh1ZV9wYWwoKShucm93KHVuaXF1ZShzb2JqW1tjbHVzdGVyaW5nXV0pKSlbY2x1c3Rlcl0KICBwbG90ID0gcGxvdCArIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygnZ3JleTkwJywgY2x1c3Rlcl9jb2xvcikpCiAgaW50ZXJjZXB0ID0gaWZlbHNlKGFudGVyaW9yLCA2NjAsIDQ4NCkKICBpZihhcmMpe3Bsb3QgPSBwbG90ICsgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTQ4NCwgbGluZXR5cGUgPSAiZGFzaGVkIixjb2xvciA9IGNsdXN0ZXJfY29sb3IpfQogIHJldHVybihwbG90KQp9CnBsb3RfY2x1c3RlcnNfdmVydGljYWxfc3BhdGlhbChqeV8xNjQsIHB0LnNpemUgPSAxLCBjbHVzdGVyID0gMywgY2x1c3RlcmluZyA9ICdSTkFfc25uX3Jlcy4wLjgnKQpgYGAKCmBgYHtyfQpwbG90X2ZlYXR1cmVzX3ZlcnRpY2FsX3NwYXRpYWxfc21vb3RoZWQgPC0gZnVuY3Rpb24oc29iaiwgZ2VuZSwgcHQuc2l6ZSA9IDAuNSwgc3BhY2UgPSAiSCIsIGFyYyA9IFRSVUUpCnsKICBjb29yZGluYXRlcyA8LSBFbWJlZGRpbmdzKHNvYmosIHJlZHVjdGlvbiA9IHNwYWNlKQogIGV4cG1hdCA8LSBhcy5tYXRyaXgoRmV0Y2hEYXRhKHNvYmosIGdlbmUpKQogIGdlbmVfZGYgPC0gYXMuZGF0YS5mcmFtZShjYmluZChjb29yZGluYXRlcywgZXhwbWF0KSkKICBjb2xuYW1lcyhnZW5lX2RmKSA8LSBjKCdYJywgJ1knLCAnZXhwcicpCiAgZ2VuZV9kZiA8LSBnZW5lX2RmICU+JSBkcGx5cjo6YXJyYW5nZSghaXMubmEoZXhwciksIGV4cHIpCiAgY29sb3JzID0gYygnZ3JleTkwJywgJ2dyZXk5MCcsICcjMGY0YzVjJykKICBnZW5lX2RmJGV4cHJbZ2VuZV9kZiRleHByID09IDBdID0gTkEKICBwbG90IDwtIGdlbmVfZGYgJT4lCiAgICBmaWx0ZXIoIWlzLm5hKGV4cHIpKSAlPiUKICAgIGdncGxvdChhZXMoeCA9IFgsIHkgPSBZLCBjb2xvciA9IGV4cHIpKSArc3RhdF9kZW5zaXR5XzJkKGFlcyhmaWxsID0gLi5kZW5zaXR5Li4pLCBnZW9tID0gInJhc3RlciIsIG4gPSA0MDAsY29udG91ciA9IEZBTFNFLCBpbnRlcnBvbGF0ZSA9IFRSVUUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApKSArCiNnZW9tX2JpbjJkKGJpbnMgPSAxMCkgKyAjZ2VvbV9wb2ludChzaXplID0gcHQuc2l6ZSwgYWxwaGEgPSAxKSsgIAogICAgICAgICAgICB0aGVtZV9jbGFzc2ljKCkgKyBnZ3RpdGxlKGdlbmUpICsgTm9BeGVzKCkgKyBOb0xlZ2VuZCgpICsgCiAgICBjb29yZF9maXhlZChyYXRpbyA9IDAuNSkgKyBzY2FsZV9maWxsX2dyYWRpZW50KG5hLnZhbHVlID0gY29sb3JzWzFdLCBsb3cgPSBjb2xvcnNbMl0sIGhpZ2ggPSBjb2xvcnNbM10sIGxhYmVscyA9IE5VTEwpICArIHRoZW1lKHRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAnYm9sZCcsIHNpemUgPSByZWwoMC41KSwgaGp1c3QgPSAxKSkgCiAgaWYoYXJjKXtwbG90ID0gcGxvdCArIGdlb21faGxpbmUoeWludGVyY2VwdD02NjAsIGxpbmV0eXBlID0gImRhc2hlZCIsY29sb3IgPSBjb2xvcnNbM10pfQogIHJldHVybihwbG90KQp9CnBsb3RfZmVhdHVyZXNfdmVydGljYWxfc3BhdGlhbF9zbW9vdGhlZChqeV8xNjQsIGdlbmUgPSAnUEFYNicpCmBgYAoKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE4fQpnZW5lcyA9IHJvd25hbWVzKGp5XzQwOCkKcGxvdHMgPC0gbGFwcGx5KDE6bGVuZ3RoKGdlbmVzKSwgZnVuY3Rpb24oaSl7CiAgICBwbG90X2ZlYXR1cmVzX3ZlcnRpY2FsX3NwYXRpYWxfc21vb3RoZWQoanlfNDA4LCBnZW5lc1tpXSwgcHQuc2l6ZSA9IDEpCiAgfSkKdmVydHM9IHBsb3RfZ3JpZChwbG90bGlzdCA9IHBsb3RzLCBsYWJlbF9zaXplID0gMTAsIG5yb3cgPSAxKQp2ZXJ0cwpnZ3NhdmUocGxvdCA9IHZlcnRzLCBmaWxlbmFtZSA9ICd0ZXN0XzQwOF9zbW9vdGhlZC12ZXJ0aWNhbF9leHByX3Bsb3RzX3NpemUxX2FscGhhMS5wbmcnLCBwYXRoID0gZmlsZS5wYXRoKG91dHB1dF9kaXJfcGxvdCwgJzIwMjIwNzIxXzEnKSwgd2lkdGggPSAxOCwgaGVpZ2h0ID0gOCwgZHBpID0gMTUwKQpgYGAKYGBge3J9Cgpub3JtZWRfZGF0YSA8LSBHZXRBc3NheURhdGEoanlfYWxsLCBzbG90ID0gJ2RhdGEnKQpnYWRfMV90cnVlID0gbm9ybWVkX2RhdGFbJ0dBRDEnLCBdICE9IDAKanlfYWxsJGdhZDEgPSBnYWRfMV90cnVlCmp5X2dhZCA9IGp5X2FsbFssIGp5X2FsbCRnYWQxXQoKCmJyZWFrcG9pbnRzID0gMToyMC8xMCswLjMKcGxvdHMgPSBsaXN0KCkKanlfZ2FkIDwtIEZpbmRWYXJpYWJsZUZlYXR1cmVzKGp5X2dhZCwgc2VsZWN0aW9uLm1ldGhvZCA9ICJ2c3QiKQphbGwuZ2VuZXMgPC0gcm93bmFtZXMoanlfZ2FkKQpqeV9nYWQgPC0gU2NhbGVEYXRhKGp5X2dhZCwgZmVhdHVyZXMgPSBhbGwuZ2VuZXMpCmp5X2dhZCA8LSBGaW5kTmVpZ2hib3JzKGp5X2dhZCwgZGltcyA9IDE6MzApCmkgPSAxCmZvciAoYnJlYWtwb2ludCBpbiBicmVha3BvaW50cyl7CiAganlfZ2FkIDwtIEZpbmRDbHVzdGVycyhqeV9nYWQsIHJlc29sdXRpb24gPSBicmVha3BvaW50KQogIGp5X2dhZCA8LSBSdW5VTUFQKGp5X2dhZCwgZGltcyA9IDE6MzApCiAganlfZ2FkLm1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMoanlfZ2FkLCBvbmx5LnBvcyA9IFRSVUUsIG1pbi5wY3QgPSAwLjI1LCBsb2dmYy50aHJlc2hvbGQgPSAwLjI1KQogIGxhYmVscyA9IGp5X2dhZC5tYXJrZXJzICU+JQogICBncm91cF9ieShjbHVzdGVyKSAlPiUKICAgc2xpY2VfbWF4KG4gPSAxLCBvcmRlcl9ieSA9IGF2Z19sb2cyRkMpCiAgbmV3LmNsdXN0ZXIuaWRzIDwtIGxhYmVscyRnZW5lCiAgbmFtZXMobmV3LmNsdXN0ZXIuaWRzKSA8LSBsZXZlbHMoanlfZ2FkKQogIGp5X2dhZCA8LSBSZW5hbWVJZGVudHMoanlfZ2FkLCBuZXcuY2x1c3Rlci5pZHMpCiAgcGxvdHNbW2ldXSA9IERpbVBsb3QoanlfZ2FkLCByZWR1Y3Rpb24gPSAidW1hcCIsIHB0LnNpemUgPSAxLCBsYWJlbCA9IFRSVUUpICsgTm9BeGVzKCkgKyBOb0xlZ2VuZCgpICsgZ2d0aXRsZShicmVha3BvaW50KQogIGkgPSBpICsgMQp9CgptYXJyYW5nZUdyb2IocGxvdHMsIG5yb3c9MiwgbmNvbD0yKQptbCA8LSBtYXJyYW5nZUdyb2IocGxvdHMsIG5yb3c9MiwgbmNvbD0yKQpnZ3NhdmUoZmlsZW5hbWUgPSAnZ2FkMV9zZXF1ZW50aWFsX2NsdXN0ZXJpbmdfdW1hcHMucGRmJywgcGF0aCA9IGZpbGUucGF0aChvdXRwdXRfZGlyX3Bsb3QsICcyMDIyMDcyMV8xJyksIG1sKQpgYGAKCmBgYHtyIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTEwfQpnZW5lcyA9IHJvd25hbWVzKGp5X2dhZCkKcGxvdHMgPC0gbGFwcGx5KDE6bGVuZ3RoKGdlbmVzKSwgZnVuY3Rpb24oaSl7CiAgICBwbG90X2ZlYXR1cmVzX3VtYXAoanlfZ2FkLCBnZW5lc1tpXSwgcHQuc2l6ZSA9IDAuNSkKICB9KQp1bWFwcyA9IHBsb3RfZ3JpZChwbG90bGlzdCA9IHBsb3RzLCBsYWJlbF9zaXplID0gMTAsIG5yb3cgPSA0KQp1bWFwcwpnZ3NhdmUocGxvdCA9IHVtYXBzLCBmaWxlbmFtZSA9ICd0ZXN0X2dhZF91bWFwbF9leHByX3Bsb3RzX3NpemUxX2FscGhhMS5wbmcnLCBwYXRoID0gZmlsZS5wYXRoKG91dHB1dF9kaXJfcGxvdCwgJzIwMjIwNzIxXzEnKSwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNCwgZHBpID0gMTUwKQoKYGBgCgoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTR9CmJpZ19kaW1wbG90IDwtIGZ1bmN0aW9uKHNvYmosIGdyZXBfcGF0dGVybil7CiAgZHAgPSBEaW1QbG90KHNvYmosIGNlbGxzLmhpZ2hsaWdodCA9IGxpc3QoaW1wID0gd2hpY2goZ3JlcGwoZ3JlcF9wYXR0ZXJuLCBzb2JqJGFyZWEpKSkpCiAgZHAgPC0gZHAgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygnZ3JleTkwJywgJyMxOTgyYzQnKSwgbGFiZWxzPWMoJ290aGVyJywgZ3JlcF9wYXR0ZXJuKSkgKyBOb0F4ZXMoKQp9CnBhdHRlcm5zID0gYygnNDA4X0NDJywgJzQwOF9NU19DQycsICd2TVNfVEMnLCAnZE1TX1RDJywgJzQwOF9UQycsICcxNjRfQ0MnLCAnMTY0X01TX0NDJywgJzE2NF9NU19UQycsICAnMTY0X1RDJykKcGxvdHMgPC0gbGFwcGx5KDE6bGVuZ3RoKHBhdHRlcm5zKSwgZnVuY3Rpb24oaSl7CiAgICBiaWdfZGltcGxvdChqeV9nYWQsIGdyZXBfcGF0dGVybiA9IHBhdHRlcm5zW2ldKQogIH0pCmFyZWFzID0gcGxvdF9ncmlkKHBsb3RsaXN0ID0gcGxvdHMsIGxhYmVsX3NpemUgPSAxMCwgbnJvdyA9IDMpCmFyZWFzCmdnc2F2ZShwbG90ID0gYXJlYXMsIGZpbGVuYW1lID0gJ3Rlc3RfZ2FkX2FyZWFfcGxvdHNfc2l6ZTFfYWxwaGExLnBuZycsIHBhdGggPSBmaWxlLnBhdGgob3V0cHV0X2Rpcl9wbG90LCAnMjAyMjA3MjFfMScpLCB3aWR0aCA9IDE0LCBoZWlnaHQgPSA4LCBkcGkgPSAxNTApCmBgYAoKYGBge3J9ClZsblBsb3QoanlfYWxsLCBmZWF0dXJlcyA9IGMoJ0NPVVBURjInKSkKYGBgCmBgYHtyfQpWbG5QbG90KGp5X2FsbCwgZmVhdHVyZXMgPSAnR1NYMicpICsgTm9MZWdlbmQoKQpgYGAKCmBgYHtyfQoKcGxvdF92ZXJ0aWNhbF9zbW9vdGhlZCA8LSBmdW5jdGlvbihzb2JqLCBnZW5lLCBpbWFnZXNfb3JkZXJlZCl7CiAgZXhwbWF0IDwtIGFzLm1hdHJpeChGZXRjaERhdGEoc29iaiwgZ2VuZSkpCiAgIyMgV2hhdCdzIHRoZSBsb2dpYy4gSSBuZWVkIHRvIGJ1aWxkIGEgcmVjdGFuZ2xlLCBzbyBqdXN0IGdpdmUgaXQgdGhlIHgsIHkKICAjIyBhbmQgZmlsbCBpcyBub3QgZGVuc2l0eQogIHhwb3MgPSByZXAoMCwgbGVuZ3RoKGltYWdlc19vcmRlcmVkKSkKICB5cG9zID0gMTpsZW5ndGgoaW1hZ2VzX29yZGVyZWQpCiAgaW1hZ2VfZXhwciA9IGMoKQogIGZvcihpIGluIDE6bGVuZ3RoKGltYWdlc19vcmRlcmVkKSl7CiAgICBpbWFnZSA9IGltYWdlc19vcmRlcmVkW2ldCiAgICBnZW5lX2V4cHJfaW5fc3Vic2V0ID0gZXhwbWF0W3NvYmokSU1BR0UuTkFNRSA9PSBpbWFnZV0KICAgIGltYWdlX2V4cHIgPSBjKGltYWdlX2V4cHIsIG1lYW4oZ2VuZV9leHByX2luX3N1YnNldCkpCiAgfQogIHRpbGVfZGYgPSBhcy5kYXRhLmZyYW1lKGNiaW5kKHhwb3MsIHlwb3MsIGltYWdlX2V4cHIpKSAKICBjb2xuYW1lcyh0aWxlX2RmKSA8LSAgYygnWCcsICdZJywnbWVhbl9leHByJykKICBwIDwtIHRpbGVfZGYgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSBYLCB5ID0gWSwgZmlsbCA9IG1lYW5fZXhwcikpICsgZ2VvbV9yYXN0ZXIoaW50ZXJwb2xhdGUgPSBUUlVFKSArCiAgICBjb29yZF9maXhlZCgpICsgdGhlbWVfY2xhc3NpYygpICsgTm9BeGVzKCkgKyBOb0xlZ2VuZCgpICsgZ2d0aXRsZShnZW5lKSArIHRoZW1lKHRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAnYm9sZCcsIHNpemUgPSByZWwoMC41KSwgaGp1c3QgPSAxKSkgCiAgcmV0dXJuKHApCn0KCnBsb3RfdmVydGljYWxfc21vb3RoZWQoanlfMTY0LCAnUEFYNicsIGltYWdlc19vcmRlcmVkKQpgYGAKYGBge3J9CmdlbmVzX3RvX3Nob3cgPSBjKCdEQ1gnLCAnR0FEMScsICdETFgyJywgJ05LWDIuMScsICdQUk9YMScsICdNQUYxJywgJ1RTSFoxJywgJ0NYQ1I0JywgJ0NYQ0wxMicsICdDQUxCMicsICdUQlIxJykKZ2VuZXMgPSBnZW5lc190b19zaG93CnBsb3RzIDwtIGxhcHBseSgxOmxlbmd0aChnZW5lcyksIGZ1bmN0aW9uKGkpewogICAgcGxvdF92ZXJ0aWNhbF9zbW9vdGhlZChqeV8xNjQsIGdlbmVzW2ldLCBpbWFnZXNfb3JkZXJlZCkKICB9KQp2ZXJ0cz0gcGxvdF9ncmlkKHBsb3RsaXN0ID0gcGxvdHMsIGxhYmVsX3NpemUgPSAxMCwgbnJvdyA9IDEpCnZlcnRzCiNnZ3NhdmUocGxvdCA9IHZlcnRzLCBmaWxlbmFtZSA9ICd0ZXN0XzQwOF9zbW9vdGhlZC12ZXJ0aWNhbF9leHByX3Bsb3RzX3NpemUxX2FscGhhMS5wbmcnLCBwYXRoID0gZmlsZS5wYXRoKG91dHB1dF9kaXJfcGxvdCwgJzIwMjIwNzIxXzEnKSwgd2lkdGggPSAxOCwgaGVpZ2h0ID0gOCwgZHBpID0gMTUwKQpgYGAKCmBgYHtyIGZpZy5oZWlnaHQ9MTUsIGZpZy53aWR0aD02fQpycGxvdCA8LSBSaWRnZVBsb3QoanlfYWxsLCBmZWF0dXJlcyA9IGdlbmVzX3RvX3Nob3csIGdyb3VwLmJ5ID0gJ2FyZWEnLCBuY29sID0gMikKZ2dzYXZlKHJwbG90LCBmaWxlbmFtZSA9ICdycGxvdF9ieV9hcmVhLnBuZycsIHBhdGggPSBmaWxlLnBhdGgob3V0cHV0X2Rpcl9wbG90LCAnMjAyMjA3MjdfMScpLCB3aWR0aCA9IDYsIGhlaWdodCA9IDE1LCBkcGkgPSAxNTApCmBgYAoKYGBge3IgZmlnLmhlaWdodD0xNSwgZmlnLndpZHRoPTEwfQp2cGxvdCA8LSBWbG5QbG90KGp5X2FsbCwgZmVhdHVyZXMgPSBnZW5lc190b19zaG93LCBncm91cC5ieSA9ICdhcmVhJywgbmNvbCA9IDMpCnZwbG90Cmdnc2F2ZSh2cGxvdCwgZmlsZW5hbWUgPSAndnBsb3RfYnlfYXJlYS5wbmcnLCBwYXRoID0gZmlsZS5wYXRoKG91dHB1dF9kaXJfcGxvdCwgJzIwMjIwNzI3XzEnKSwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gMTUsIGRwaSA9IDE1MCkKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0PTE1LCBmaWcud2lkdGg9MTB9CnZwbG90IDwtIFZsblBsb3QoanlfYWxsLCBmZWF0dXJlcyA9IGdlbmVzX3RvX3Nob3csIGdyb3VwLmJ5ID0gJ2FyZWEnLCBuY29sID0gMykKdnBsb3QKZ2dzYXZlKHZwbG90LCBmaWxlbmFtZSA9ICd2cGxvdF9ieV9hcmVhLnBuZycsIHBhdGggPSBmaWxlLnBhdGgob3V0cHV0X2Rpcl9wbG90LCAnMjAyMjA3MjdfMScpLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSAxNSwgZHBpID0gMTUwKQpgYGAKCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD00fQpnZW5lc190b19zaG93ID0gYygnRENYJywgJ0dBRDEnLCAnQ1hDUjQnLCAnRExYMicsICdOS1gyLjEnLCAnUFJPWDEnLCAnTUFGMScsICdUU0haMScsICdDWENMMTInLCAnQ0FMQjInLCAnVEJSMScsICdDT1VQVEYyJywgJ1NQOCcsICdTQ0dOJykKZHBsb3QgPC0gRG90UGxvdChqeV9hbGwsIGZlYXR1cmVzID0gZ2VuZXNfdG9fc2hvdywgZ3JvdXAuYnkgPSAnYnJvYWRfYXJlYXMnLCkgKyBSb3RhdGVkQXhpcygpICsgY29vcmRfZmxpcCgpCmRwbG90CiNnZ3NhdmUoZHBsb3QsIGZpbGVuYW1lID0gJ2RwbG90X2J5X2Jyb2FkYXJlYV9hbGxnZW5lcy5wbmcnLCBwYXRoID0gZmlsZS5wYXRoKG91dHB1dF9kaXJfcGxvdCwgJzIwMjIwNzI3XzEnKSwgd2lkdGggPSA5LCBoZWlnaHQgPSAzLCBkcGkgPSAxNTApCmBgYAoKYGBge3J9CmJyb2FkX2FyZWFzID0gYygpCmp5X2FsbCRicm9hZF9hcmVhcyA9ICd3cm9uZycKanlfYWxsJGJyb2FkX2FyZWFzW2dyZXBsKCc0MDgnLCBqeV9hbGwkYXJlYSkgJiBncmVwbCgnVEMnLCBqeV9hbGwkYXJlYSldID0gJ3BWZW50cmFsJwpqeV9hbGwkYnJvYWRfYXJlYXNbZ3JlcGwoJzQwOCcsIGp5X2FsbCRhcmVhKSAmIGdyZXBsKCdDQycsIGp5X2FsbCRhcmVhKV0gPSAncERvcnNhbCcKanlfYWxsJGJyb2FkX2FyZWFzW2dyZXBsKCcxNjQnLCBqeV9hbGwkYXJlYSkgJiBncmVwbCgnVEMnLCBqeV9hbGwkYXJlYSldID0gJ2FWZW50cmFsJwpqeV9hbGwkYnJvYWRfYXJlYXNbZ3JlcGwoJzE2NCcsIGp5X2FsbCRhcmVhKSAmIGdyZXBsKCdDQycsIGp5X2FsbCRhcmVhKV0gPSAnYURvcnNhbCcKYGBgCgoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTB9CmJpZ19kaW1wbG90IDwtIGZ1bmN0aW9uKHNvYmosIGdyZXBfcGF0dGVybil7CiAgZHAgPSBEaW1QbG90KHNvYmosIGNlbGxzLmhpZ2hsaWdodCA9IGxpc3QoaW1wID0gd2hpY2goZ3JlcGwoZ3JlcF9wYXR0ZXJuLCBzb2JqJGJyb2FkX2FyZWFzKSkpKQogIGRwIDwtIGRwICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoJ2dyZXk5MCcsICcjMTk4MmM0JyksIGxhYmVscz1jKCdvdGhlcicsIGdyZXBfcGF0dGVybikpICsgTm9BeGVzKCkKfQpwYXR0ZXJucyA9IGMoJ0FudERycycsICdBbnRWbnQnLCAnUG9zRHJzJywgJ1Bvc1ZudCcpCnBsb3RzIDwtIGxhcHBseSgxOmxlbmd0aChwYXR0ZXJucyksIGZ1bmN0aW9uKGkpewogICAgYmlnX2RpbXBsb3QoanlfYWxsLCBncmVwX3BhdHRlcm4gPSBwYXR0ZXJuc1tpXSkKICB9KQphcmVhcyA9IHBsb3RfZ3JpZChwbG90bGlzdCA9IHBsb3RzLCBsYWJlbF9zaXplID0gMTAsIG5yb3cgPSAzKQphcmVhcwpnZ3NhdmUocGxvdCA9IGFyZWFzLCBmaWxlbmFtZSA9ICd1bWFwX2Jyb2FkX2FyZWFzLnBuZycsIHBhdGggPSBmaWxlLnBhdGgob3V0cHV0X2Rpcl9wbG90LCAnMjAyMjA3MjdfMScpLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA4LCBkcGkgPSAxNTApCmBgYApgYGB7ciBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD00fQpEaW1QbG90KGp5X2FsbCwgc3BsaXQuYnkgPSAnYnJvYWRfYXJlYXMnLCBuY29sID0gMikgKyBOb0F4ZXMoKSArTm9MZWdlbmQoKSMrIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikKYGBgCgo=